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 › compiler_rt/ › log.zig › logf
logf
log.logf
pub fn logf (x_ : f32 ) callconv (.c ) f32
File
Code
pub fn logf (x_ : f32 ) callconv (.c ) f32 {
const ln2_hi : f32 = 6.9313812256e-01 ;
const ln2_lo : f32 = 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 ;
var x = x_ ;
var ix : u32 = @bitCast (x );
var k : i32 = 0 ;
if (ix < 0x00800000 or ix >> 31 != 0 ) {
if (ix << 1 == 0 ) {
return if (compiler_rt .want_float_exceptions ) -1 / (x * x ) else -std .math .inf (f64 );
}
if (ix >> 31 != 0 ) {
return if (compiler_rt .want_float_exceptions ) (x - x ) / 0.0 else math .nan (f64 );
}
k -= 25 ;
x *= 0x1.0p25 ;
ix = @bitCast (x );
} else if (ix >= 0x7F800000 ) {
return x ;
} else if (ix == 0x3F800000 ) {
return 0 ;
}
ix += 0x3F800000 - 0x3F3504F3 ;
k += @as (i32 , @intCast (ix >> 23 )) - 0x7F ;
ix = (ix & 0x007FFFFF ) + 0x3F3504F3 ;
x = @bitCast (ix );
const f = x - 1.0 ;
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 : f32 = @floatFromInt (k );
return s * (hfsq + R ) + dk * ln2_lo - hfsq + f + dk * ln2_hi ;
}