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