fn computePow5(i: u32) [2]u64 i: u32719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735 fn computePow5(i: u32) [2]u64 {
const base = i / FLOAT64_POW5_TABLE_SIZE;
const base2 = base * FLOAT64_POW5_TABLE_SIZE;
const mul = &FLOAT64_POW5_SPLIT2[base];
if (i == base2) {
return .{ mul[0], mul[1] };
} else {
const offset = i - base2;
const m = FLOAT64_POW5_TABLE[offset];
const b0 = @as(u128, m) * mul[0];
const b2 = @as(u128, m) * mul[1];
const delta: u7 = @intCast(pow5Bits(i) - pow5Bits(base2));
const shift: u5 = @intCast((i % 16) << 1);
const shifted_sum = ((b0 >> delta) + (b2 << (64 - delta))) + 1 + ((FLOAT64_POW5_OFFSETS[i / 16] >> shift) & 3);
return .{ @truncate(shifted_sum), @truncate(shifted_sum >> 64) };
}
}