mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: restrict numeric promotions to cases where no data is lost
This commit is contained in:
@@ -59,7 +59,7 @@ const(
|
||||
const(
|
||||
mantbits32 = u32(23)
|
||||
expbits32 = u32(8)
|
||||
bias32 = u32(127) // f32 exponent bias
|
||||
bias32 = 127 // f32 exponent bias
|
||||
maxexp32 = 255
|
||||
)
|
||||
|
||||
@@ -189,10 +189,10 @@ pub fn f32_to_decimal(mant u32, exp u32) Dec32 {
|
||||
if exp == 0 {
|
||||
// We subtract 2 so that the bounds computation has
|
||||
// 2 additional bits.
|
||||
e2 = 1 - bias32 - mantbits32 - 2
|
||||
e2 = 1 - bias32 - int(mantbits32) - 2
|
||||
m2 = mant
|
||||
} else {
|
||||
e2 = int(exp) - bias32 - mantbits32 - 2
|
||||
e2 = int(exp) - bias32 - int(mantbits32) - 2
|
||||
m2 = (u32(1) << mantbits32) | mant
|
||||
}
|
||||
even := (m2 & 1) == 0
|
||||
|
@@ -73,7 +73,7 @@ const(
|
||||
const(
|
||||
mantbits64 = u32(52)
|
||||
expbits64 = u32(11)
|
||||
bias64 = u32(1023) // f64 exponent bias
|
||||
bias64 = 1023 // f64 exponent bias
|
||||
maxexp64 = 2047
|
||||
)
|
||||
|
||||
@@ -220,10 +220,10 @@ fn f64_to_decimal(mant u64, exp u64) Dec64 {
|
||||
if exp == 0 {
|
||||
// We subtract 2 so that the bounds computation has
|
||||
// 2 additional bits.
|
||||
e2 = 1 - bias64 - mantbits64 - 2
|
||||
e2 = 1 - bias64 - int(mantbits64) - 2
|
||||
m2 = mant
|
||||
} else {
|
||||
e2 = int(exp) - bias64 - mantbits64 - 2
|
||||
e2 = int(exp) - bias64 - int(mantbits64) - 2
|
||||
m2 = (u64(1)<<mantbits64) | mant
|
||||
}
|
||||
even := (m2 & 1) == 0
|
||||
|
Reference in New Issue
Block a user