| ... | ... | @@ -32,13 +32,13 @@ pub fn errol3(value: f64, buffer: []u8) -> FloatDecimal { |
| 32 | 32 | fn errol3u(val: f64, buffer: []u8) -> FloatDecimal { |
| 33 | 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 | 36 | return errolInt(val, buffer); |
| 37 | 37 | } else if (val >= 16.0 and val < 9.007199254740992e15) { |
| 38 | 38 | return errolFixed(val, buffer); |
| 39 | 39 | } |
| 40 | 40 | |
| 41 | | |
| 41 | |
| 42 | 42 | // normalize the midpoint |
| 43 | 43 | |
| 44 | 44 | const e = math.frexp(val).exponent; |
| ... | ... | @@ -138,7 +138,7 @@ fn tableLowerBound(k: u64) -> usize { |
| 138 | 138 | |
| 139 | 139 | while (j < enum3.len) { |
| 140 | 140 | if (enum3[j] < k) { |
| 141 | | j = 2 * k + 2; |
| 141 | j = 2 * j + 2; |
| 142 | 142 | } else { |
| 143 | 143 | i = j; |
| 144 | 144 | j = 2 * j + 1; |
| ... | ... | @@ -217,7 +217,7 @@ fn hpMul10(hp: &HP) { |
| 217 | 217 | |
| 218 | 218 | hp.val *= 10.0; |
| 219 | 219 | hp.off *= 10.0; |
| 220 | | |
| 220 | |
| 221 | 221 | var off = hp.val; |
| 222 | 222 | off -= val * 8.0; |
| 223 | 223 | off -= val * 2.0; |
| ... | ... | @@ -235,13 +235,13 @@ fn hpMul10(hp: &HP) { |
| 235 | 235 | fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { |
| 236 | 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 | 240 | var mid = u128(val); |
| 241 | 241 | var low: u128 = mid - fpeint((fpnext(val) - val) / 2.0); |
| 242 | 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 | 245 | high -= 1; |
| 246 | 246 | } else { |
| 247 | 247 | low -= 1; |
| ... | ... | @@ -347,11 +347,11 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { |
| 347 | 347 | } |
| 348 | 348 | |
| 349 | 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 | 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 | 357 | pub const c_digits_lut = []u8 { |
| ... | ... | @@ -510,10 +510,6 @@ fn u64toa(value_param: u64, buffer: []u8) -> usize { |
| 510 | 510 | buf_index += 1; |
| 511 | 511 | buffer[buf_index] = c_digits_lut[d8]; |
| 512 | 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 | 513 | buffer[buf_index] = c_digits_lut[d8 + 1]; |
| 518 | 514 | buf_index += 1; |
| 519 | 515 | } else { |
| ... | ... | @@ -613,7 +609,7 @@ fn fpeint(from: f64) -> u128 { |
| 613 | 609 | const bits = @bitCast(u64, from); |
| 614 | 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 | |