| ... | @@ -181,7 +181,7 @@ fn split(val: f64, hi: &f64, lo: &f64) { | ... | @@ -181,7 +181,7 @@ fn split(val: f64, hi: &f64, lo: &f64) { |
| 181 | *lo = val - *hi; | 181 | *lo = val - *hi; |
| 182 | } | 182 | } |
| 183 | | 183 | |
| 184 | fn gethi(in: f64) { | 184 | fn gethi(in: f64) -> f64 { |
| 185 | const bits = @bitCast(u64, in); | 185 | const bits = @bitCast(u64, in); |
| 186 | const new_bits = bits & 0xFFFFFFFFF8000000; | 186 | const new_bits = bits & 0xFFFFFFFFF8000000; |
| 187 | return @bitCast(f64, new_bits); | 187 | return @bitCast(f64, new_bits); |
| ... | @@ -199,7 +199,7 @@ fn hpNormalize(hp: &HP) { | ... | @@ -199,7 +199,7 @@ fn hpNormalize(hp: &HP) { |
| 199 | /// Divide the high-precision number by ten. | 199 | /// Divide the high-precision number by ten. |
| 200 | /// @hp: The high-precision number | 200 | /// @hp: The high-precision number |
| 201 | fn hpDiv10(hp: &HP) { | 201 | fn hpDiv10(hp: &HP) { |
| 202 | const val = hp.val; | 202 | var val = hp.val; |
| 203 | | 203 | |
| 204 | hp.val /= 10.0; | 204 | hp.val /= 10.0; |
| 205 | hp.off /= 10.0; | 205 | hp.off /= 10.0; |
| ... | @@ -235,7 +235,7 @@ fn hpMul10(hp: &HP) { | ... | @@ -235,7 +235,7 @@ fn hpMul10(hp: &HP) { |
| 235 | /// @buf: The output buffer. | 235 | /// @buf: The output buffer. |
| 236 | /// &return: The exponent. | 236 | /// &return: The exponent. |
| 237 | fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { | 237 | fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { |
| 238 | const pow19 = 1e19; | 238 | const pow19 = u128(1e19); |
| 239 | | 239 | |
| 240 | assert((val >= 9.007199254740992e15) and val < (3.40282366920938e38)); | 240 | assert((val >= 9.007199254740992e15) and val < (3.40282366920938e38)); |
| 241 | | 241 | |
| ... | @@ -249,10 +249,10 @@ fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -249,10 +249,10 @@ fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { |
| 249 | low -= 1; | 249 | low -= 1; |
| 250 | } | 250 | } |
| 251 | | 251 | |
| 252 | const l64 = u64(low % pow19); | 252 | var l64 = u64(low % pow19); |
| 253 | const lf = u64((low / pow19) % pow19); | 253 | const lf = u64((low / pow19) % pow19); |
| 254 | | 254 | |
| 255 | const h64 = u64(high % pow19); | 255 | var h64 = u64(high % pow19); |
| 256 | const hf = u64((high / pow19) % pow19); | 256 | const hf = u64((high / pow19) % pow19); |
| 257 | | 257 | |
| 258 | if (lf != hf) { | 258 | if (lf != hf) { |
| ... | @@ -269,7 +269,7 @@ fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -269,7 +269,7 @@ fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { |
| 269 | x *= 10; | 269 | x *= 10; |
| 270 | } | 270 | } |
| 271 | } | 271 | } |
| 272 | const m64: u64 = mid / x; | 272 | const m64 = @truncate(u64, @divTrunc(mid, x)); |
| 273 | | 273 | |
| 274 | if (lf != hf) | 274 | if (lf != hf) |
| 275 | mi += 19; | 275 | mi += 19; |
| ... | @@ -277,14 +277,14 @@ fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -277,14 +277,14 @@ fn errolInt(val: f64, buffer: []u8) -> FloatDecimal { |
| 277 | var buf_index = u64toa(m64, buffer) - 1; | 277 | var buf_index = u64toa(m64, buffer) - 1; |
| 278 | | 278 | |
| 279 | if (mi != 0) { | 279 | if (mi != 0) { |
| 280 | buffer[buf_index - 1] += (buffer[buf_index] >= '5'); | 280 | buffer[buf_index - 1] += u8(buffer[buf_index] >= '5'); |
| 281 | } else { | 281 | } else { |
| 282 | buf_index += 1; | 282 | buf_index += 1; |
| 283 | } | 283 | } |
| 284 | | 284 | |
| 285 | return FloatDecimal { | 285 | return FloatDecimal { |
| 286 | .digits = buffer[0..buf_index], | 286 | .digits = buffer[0..buf_index], |
| 287 | .exp = buf_index + mi, | 287 | .exp = i32(buf_index) + mi, |
| 288 | }; | 288 | }; |
| 289 | } | 289 | } |
| 290 | | 290 | |
| ... | @@ -303,25 +303,25 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -303,25 +303,25 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { |
| 303 | var hi = ((fpnext(val) - n) + mid) / 2.0; | 303 | var hi = ((fpnext(val) - n) + mid) / 2.0; |
| 304 | | 304 | |
| 305 | var buf_index = u64toa(u, buffer); | 305 | var buf_index = u64toa(u, buffer); |
| 306 | var exp: i32 = buf_index; | 306 | var exp = i32(buf_index); |
| 307 | var j: i32 = exp; | 307 | var j = buf_index; |
| 308 | buffer[j] = 0; | 308 | buffer[j] = 0; |
| 309 | | 309 | |
| 310 | if (mid != 0.0) { | 310 | if (mid != 0.0) { |
| 311 | while (mid != 0.0) { | 311 | while (mid != 0.0) { |
| 312 | lo *= 10.0; | 312 | lo *= 10.0; |
| 313 | var ldig = i32(lo); | 313 | const ldig = i32(lo); |
| 314 | lo -= ldig; | 314 | lo -= f64(ldig); |
| 315 | | 315 | |
| 316 | mid *= 10.0; | 316 | mid *= 10.0; |
| 317 | var mdig = i32(mid); | 317 | const mdig = i32(mid); |
| 318 | mid -= mdig; | 318 | mid -= f64(mdig); |
| 319 | | 319 | |
| 320 | hi *= 10.0; | 320 | hi *= 10.0; |
| 321 | var hdig = i32(hi); | 321 | const hdig = i32(hi); |
| 322 | hi -= hdig; | 322 | hi -= f64(hdig); |
| 323 | | 323 | |
| 324 | buffer[j] = mdig + '0'; | 324 | buffer[j] = u8(mdig + '0'); |
| 325 | j += 1; | 325 | j += 1; |
| 326 | | 326 | |
| 327 | if(hdig != ldig or j > 50) | 327 | if(hdig != ldig or j > 50) |
| ... | @@ -330,7 +330,7 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { | ... | @@ -330,7 +330,7 @@ fn errolFixed(val: f64, buffer: []u8) -> FloatDecimal { |
| 330 | | 330 | |
| 331 | if (mid > 0.5) { | 331 | if (mid > 0.5) { |
| 332 | buffer[j-1] += 1; | 332 | buffer[j-1] += 1; |
| 333 | } else if ((mid == 0.5) and (buffer[j-1] & 0x1)) { | 333 | } else if ((mid == 0.5) and (buffer[j-1] & 0x1) != 0) { |
| 334 | buffer[j-1] += 1; | 334 | buffer[j-1] += 1; |
| 335 | } | 335 | } |
| 336 | } else { | 336 | } else { |
| ... | @@ -374,7 +374,8 @@ pub const c_digits_lut = []u8 { | ... | @@ -374,7 +374,8 @@ pub const c_digits_lut = []u8 { |
| 374 | '9', '8', '9', '9', | 374 | '9', '8', '9', '9', |
| 375 | }; | 375 | }; |
| 376 | | 376 | |
| 377 | fn u64toa(value: u64, buffer: []u8) -> usize { | 377 | fn u64toa(value_param: u64, buffer: []u8) -> usize { |
| | 378 | var value = value_param; |
| 378 | const kTen8: u64 = 100000000; | 379 | const kTen8: u64 = 100000000; |
| 379 | const kTen9: u64 = kTen8 * 10; | 380 | const kTen9: u64 = kTen8 * 10; |
| 380 | const kTen10: u64 = kTen8 * 100; | 381 | const kTen10: u64 = kTen8 * 100; |
| ... | @@ -443,8 +444,8 @@ fn u64toa(value: u64, buffer: []u8) -> usize { | ... | @@ -443,8 +444,8 @@ fn u64toa(value: u64, buffer: []u8) -> usize { |
| 443 | buf_index += 1; | 444 | buf_index += 1; |
| 444 | } | 445 | } |
| 445 | } else if (value < kTen16) { | 446 | } else if (value < kTen16) { |
| 446 | const v0: u32 = (uint32_t)(value / kTen8); | 447 | const v0: u32 = u32(value / kTen8); |
| 447 | const v1: u32 = (uint32_t)(value % kTen8); | 448 | const v1: u32 = u32(value % kTen8); |
| 448 | | 449 | |
| 449 | const b0: u32 = v0 / 10000; | 450 | const b0: u32 = v0 / 10000; |
| 450 | const c0: u32 = v0 % 10000; | 451 | const c0: u32 = v0 % 10000; |
| ... | @@ -518,11 +519,11 @@ fn u64toa(value: u64, buffer: []u8) -> usize { | ... | @@ -518,11 +519,11 @@ fn u64toa(value: u64, buffer: []u8) -> usize { |
| 518 | buffer[buf_index] = c_digits_lut[d8 + 1]; | 519 | buffer[buf_index] = c_digits_lut[d8 + 1]; |
| 519 | buf_index += 1; | 520 | buf_index += 1; |
| 520 | } else { | 521 | } else { |
| 521 | const a: u32 = (uint32_t)(value / kTen16); // 1 to 1844 | 522 | const a = u32(value / kTen16); // 1 to 1844 |
| 522 | value %= kTen16; | 523 | value %= kTen16; |
| 523 | | 524 | |
| 524 | if (a < 10) { | 525 | if (a < 10) { |
| 525 | buffer[buf_index] = (char)('0' + (char)(a)); | 526 | buffer[buf_index] = '0' + u8(a); |
| 526 | buf_index += 1; | 527 | buf_index += 1; |
| 527 | } else if (a < 100) { | 528 | } else if (a < 100) { |
| 528 | const i: u32 = a << 1; | 529 | const i: u32 = a << 1; |
| ... | @@ -531,7 +532,7 @@ fn u64toa(value: u64, buffer: []u8) -> usize { | ... | @@ -531,7 +532,7 @@ fn u64toa(value: u64, buffer: []u8) -> usize { |
| 531 | buffer[buf_index] = c_digits_lut[i + 1]; | 532 | buffer[buf_index] = c_digits_lut[i + 1]; |
| 532 | buf_index += 1; | 533 | buf_index += 1; |
| 533 | } else if (a < 1000) { | 534 | } else if (a < 1000) { |
| 534 | buffer[buf_index] = (char)('0' + (char)(a / 100)); | 535 | buffer[buf_index] = '0' + u8(a / 100); |
| 535 | buf_index += 1; | 536 | buf_index += 1; |
| 536 | | 537 | |
| 537 | const i: u32 = (a % 100) << 1; | 538 | const i: u32 = (a % 100) << 1; |
| ... | @@ -552,8 +553,8 @@ fn u64toa(value: u64, buffer: []u8) -> usize { | ... | @@ -552,8 +553,8 @@ fn u64toa(value: u64, buffer: []u8) -> usize { |
| 552 | buf_index += 1; | 553 | buf_index += 1; |
| 553 | } | 554 | } |
| 554 | | 555 | |
| 555 | const v0: u32 = (uint32_t)(value / kTen8); | 556 | const v0 = u32(value / kTen8); |
| 556 | const v1: u32 = (uint32_t)(value % kTen8); | 557 | const v1 = u32(value % kTen8); |
| 557 | | 558 | |
| 558 | const b0: u32 = v0 / 10000; | 559 | const b0: u32 = v0 / 10000; |
| 559 | const c0: u32 = v0 % 10000; | 560 | const c0: u32 = v0 % 10000; |