Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › fmt/ › float.zig › Backend128_Tables
Backend128_Tables
float.Backend128_Tables
pub const Backend128_Tables = struct
File
Code
pub const Backend128_Tables = struct {
const T = u128 ;
const mulShift = mulShift128 ;
const POW5_INV_BITCOUNT = FLOAT128_POW5_INV_BITCOUNT ;
const POW5_BITCOUNT = FLOAT128_POW5_BITCOUNT ;
const bound1 = 55 ;
const bound2 = 127 ;
const adjust_q = true ;
fn computePow5 (i : u32 ) [4 ]u64 {
const base = i / FLOAT128_POW5_TABLE_SIZE ;
const base2 = base * FLOAT128_POW5_TABLE_SIZE ;
const mul = &FLOAT128_POW5_SPLIT [base ];
if (i == base2 ) {
return mul .*;
} else {
const offset = i - base2 ;
const m = &FLOAT128_POW5_TABLE [offset ];
const delta = pow5Bits (i ) - pow5Bits (base2 );
const shift : u6 = @intCast (2 * (i % 32 ));
const corr : u32 = @intCast ((FLOAT128_POW5_ERRORS [i / 32 ] >> shift ) & 3 );
return mul_128_256_shift (m , mul , delta , corr );
}
}
fn computeInvPow5 (i : u32 ) [4 ]u64 {
const base = (i + FLOAT128_POW5_TABLE_SIZE - 1 ) / FLOAT128_POW5_TABLE_SIZE ;
const base2 = base * FLOAT128_POW5_TABLE_SIZE ;
const mul = &FLOAT128_POW5_INV_SPLIT [base ];
if (i == base2 ) {
return .{ mul [0 ] + 1 , mul [1 ], mul [2 ], mul [3 ] };
} else {
const offset = base2 - i ;
const m = &FLOAT128_POW5_TABLE [offset ];
const delta = pow5Bits (base2 ) - pow5Bits (i );
const shift : u6 = @intCast (2 * (i % 32 ));
const corr : u32 = @intCast (((FLOAT128_POW5_INV_ERRORS [i / 32 ] >> shift ) & 3 ) + 1 );
return mul_128_256_shift (m , mul , delta , corr );
}
}
}