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/ › ilogb.zig › ilogbX
ilogbX
ilogb.ilogbX
fn ilogbX (comptime T : type , x : T ) i32
File
Code
fn ilogbX (comptime T : type , x : T ) i32 {
const typeWidth = @typeInfo (T ).float .bits ;
const significandBits = math .floatMantissaBits (T );
const exponentBits = math .floatExponentBits (T );
const Z = @Int (.unsigned , typeWidth );
const signBit = (@as (Z , 1 ) << (significandBits + exponentBits ));
const maxExponent = ((1 << exponentBits ) - 1 );
const exponentBias = (maxExponent >> 1 );
const absMask = signBit - 1 ;
const u = @as (Z , @bitCast (x )) & absMask ;
const e : i32 = @intCast (u >> significandBits );
if (e == 0 ) {
if (u == 0 ) {
math .raiseInvalid ();
return fp_ilogb0 ;
}
const offset = 1 + exponentBits + @as (comptime_int , @intFromBool (T == f80 )) - exponentBias ;
return offset - @as (i32 , @intCast (@clz (u )));
}
if (e == maxExponent ) {
math .raiseInvalid ();
if (u > @as (Z , @bitCast (math .inf (T )))) {
return fp_ilogbnan ;
} else return maxInt (i32 );
}
return e - exponentBias ;
}