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/ › math/ › log1p.zig › log1p_32
log1p_32
log1p.log1p_32
fn log1p_32 (x : f32 ) f32
File
Code
fn log1p_32 (x : f32 ) f32 {
const ln2_hi = 6.9313812256e-01 ;
const ln2_lo = 9.0580006145e-06 ;
const Lg1 : f32 = 0xaaaaaa.0p-24 ;
const Lg2 : f32 = 0xccce13.0p-25 ;
const Lg3 : f32 = 0x91e9ee.0p-25 ;
const Lg4 : f32 = 0xf89e26.0p-26 ;
const u : u32 = @bitCast (x );
const ix = u ;
var k : i32 = 1 ;
var f : f32 = undefined ;
var c : f32 = undefined ;
if (ix < 0x3ED413D0 or ix >> 31 != 0 ) {
if (ix == 0xBF800000 )
return x / 0.0 ;
if (ix > 0xBF800000 )
return (x - x ) / 0.0 ;
if ((ix << 1 ) < (0x33800000 << 1 )) {
if (ix & 0x7F800000 == 0 ) {
mem .doNotOptimizeAway (x * x );
}
return x ;
}
if (ix <= 0xBE95F619 ) {
k = 0 ;
c = 0 ;
f = x ;
}
} else if (ix >= 0x7F800000 ) {
return x ;
}
if (k != 0 ) {
const uf = 1 + x ;
var iu = @as (u32 , @bitCast (uf ));
iu += 0x3F800000 - 0x3F3504F3 ;
k = @as (i32 , @intCast (iu >> 23 )) - 0x7F ;
if (k < 25 ) {
c = if (k >= 2 ) 1 - (uf - x ) else x - (uf - 1 );
c /= uf ;
} else {
c = 0 ;
}
iu = (iu & 0x007FFFFF ) + 0x3F3504F3 ;
f = @as (f32 , @bitCast (iu )) - 1 ;
}
const s = f / (2.0 + f );
const z = s * s ;
const w = z * z ;
const t1 = w * (Lg2 + w * Lg4 );
const t2 = z * (Lg1 + w * Lg3 );
const R = t2 + t1 ;
const hfsq = 0.5 * f * f ;
const dk = @as (f32 , @floatFromInt (k ));
return s * (hfsq + R ) + (dk * ln2_lo + c ) - hfsq + f + dk * ln2_hi ;
}