| ... | @@ -32,13 +32,13 @@ pub fn errol3(value: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -32,13 +32,13 @@ pub fn errol3(value: f64, buffer: []u8) -> FloatDecimal { |
| 32 | fn errol3u(val: f64, buffer: []u8) -> FloatDecimal { | 32 | fn errol3u(val: f64, buffer: []u8) -> FloatDecimal { |
| 33 | // check if in integer or fixed range | 33 | // check if in integer or fixed range |
| 34 | | 34 | |
| 35 | if (val >= 9.007199254740992e15 and val < 3.40282366920938e+38) { | 35 | if (val > 9.007199254740992e15 and val < 3.40282366920938e+38) { |
| 36 | return errolInt(val, buffer); | 36 | return errolInt(val, buffer); |
| 37 | } else if (val >= 16.0 and val < 9.007199254740992e15) { | 37 | } else if (val >= 16.0 and val < 9.007199254740992e15) { |
| 38 | return errolFixed(val, buffer); | 38 | return errolFixed(val, buffer); |
| 39 | } | 39 | } |
| 40 | | 40 | |
| 41 | | 41 | |
| 42 | // normalize the midpoint | 42 | // normalize the midpoint |
| 43 | | 43 | |
| 44 | const e = math.frexp(val).exponent; | 44 | const e = math.frexp(val).exponent; |
| ... | @@ -138,7 +138,7 @@ fn tableLowerBound(k: u64) -> usize { | ... | @@ -138,7 +138,7 @@ fn tableLowerBound(k: u64) -> usize { |
| 138 | | 138 | |
| 139 | while (j < enum3.len) { | 139 | while (j < enum3.len) { |
| 140 | if (enum3[j] < k) { | 140 | if (enum3[j] < k) { |
| 141 | j = 2 * k + 2; | 141 | j = 2 * j + 2; |
| 142 | } else { | 142 | } else { |
| 143 | i = j; | 143 | i = j; |
| 144 | j = 2 * j + 1; | 144 | j = 2 * j + 1; |
| ... | @@ -217,7 +217,7 @@ fn hpMul10(hp: &HP) { | ... | @@ -217,7 +217,7 @@ fn hpMul10(hp: &HP) { |
| 217 | | 217 | |
| 218 | hp.val *= 10.0; | 218 | hp.val *= 10.0; |
| 219 | hp.off *= 10.0; | 219 | hp.off *= 10.0; |
| 220 | | 220 | |
| 221 | var off = hp.val; | 221 | var off = hp.val; |
| 222 | off -= val * 8.0; | 222 | off -= val * 8.0; |
| 223 | off -= val * 2.0; | 223 | off -= val * 2.0; |
| ... | @@ -235,13 +235,13 @@ fn hpMul10(hp: &HP) { | ... | @@ -235,13 +235,13 @@ fn hpMul10(hp: &HP) { |
| 235 | fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { | 235 | fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { |
| 236 | const pow19 = u128(1e19); | 236 | const pow19 = u128(1e19); |
| 237 | | 237 | |
| 238 | assert((val >= 9.007199254740992e15) and val < (3.40282366920938e38)); | 238 | assert((val > 9.007199254740992e15) and val < (3.40282366920938e38)); |
| 239 | | 239 | |
| 240 | var mid = u128(val); | 240 | var mid = u128(val); |
| 241 | var low: u128 = mid - fpeint((fpnext(val) - val) / 2.0); | 241 | var low: u128 = mid - fpeint((fpnext(val) - val) / 2.0); |
| 242 | var high: u128 = mid + fpeint((val - fpprev(val)) / 2.0); | 242 | var high: u128 = mid + fpeint((val - fpprev(val)) / 2.0); |
| 243 | | 243 | |
| 244 | if (@bitCast(u64, val) & 0x1 != 0) { | 244 | if (@bitCast(u64, val) & 0x1 != 0) { |
| 245 | high -= 1; | 245 | high -= 1; |
| 246 | } else { | 246 | } else { |
| 247 | low -= 1; | 247 | low -= 1; |
| ... | @@ -347,11 +347,11 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -347,11 +347,11 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { |
| 347 | } | 347 | } |
| 348 | | 348 | |
| 349 | fn fpnext(val: f64) -> f64 { | 349 | fn fpnext(val: f64) -> f64 { |
| 350 | return @bitCast(f64, @bitCast(u64, val) + 1); | 350 | return @bitCast(f64, @bitCast(u64, val) +% 1); |
| 351 | } | 351 | } |
| 352 | | 352 | |
| 353 | fn fpprev(val: f64) -> f64 { | 353 | fn fpprev(val: f64) -> f64 { |
| 354 | return @bitCast(f64, @bitCast(u64, val) - 1); | 354 | return @bitCast(f64, @bitCast(u64, val) -% 1); |
| 355 | } | 355 | } |
| 356 | | 356 | |
| 357 | pub const c_digits_lut = []u8 { | 357 | pub const c_digits_lut = []u8 { |
| ... | @@ -510,10 +510,6 @@ fn u64toa(value_param: u64, buffer: []u8) -> usize { | ... | @@ -510,10 +510,6 @@ fn u64toa(value_param: u64, buffer: []u8) -> usize { |
| 510 | buf_index += 1; | 510 | buf_index += 1; |
| 511 | buffer[buf_index] = c_digits_lut[d8]; | 511 | buffer[buf_index] = c_digits_lut[d8]; |
| 512 | buf_index += 1; | 512 | buf_index += 1; |
| 513 | buffer[buf_index] = c_digits_lut[d8]; | | |
| 514 | buf_index += 1; | | |
| 515 | buffer[buf_index] = c_digits_lut[d8]; | | |
| 516 | buf_index += 1; | | |
| 517 | buffer[buf_index] = c_digits_lut[d8 + 1]; | 513 | buffer[buf_index] = c_digits_lut[d8 + 1]; |
| 518 | buf_index += 1; | 514 | buf_index += 1; |
| 519 | } else { | 515 | } else { |
| ... | @@ -613,7 +609,7 @@ fn fpeint(from: f64) -> u128 { | ... | @@ -613,7 +609,7 @@ fn fpeint(from: f64) -> u128 { |
| 613 | const bits = @bitCast(u64, from); | 609 | const bits = @bitCast(u64, from); |
| 614 | assert((bits & ((1 << 52) - 1)) == 0); | 610 | assert((bits & ((1 << 52) - 1)) == 0); |
| 615 | | 611 | |
| 616 | return u64(1) << u6(((bits >> 52) - 1023)); | 612 | return u128(1) << @truncate(u7, (bits >> 52) -% 1023); |
| 617 | } | 613 | } |
| 618 | | 614 | |
| 619 | | 615 | |