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/ › complex/ › exp.zig › exp64
exp64
exp.exp64
fn exp64 (z : Complex (f64 )) Complex (f64 )
File
Code
fn exp64 (z : Complex (f64 )) Complex (f64 ) {
const exp_overflow = 0x40862e42 ;
const cexp_overflow = 0x4096b8e4 ;
const x = z .re ;
const y = z .im ;
const fy : u64 = @bitCast (y );
const hy : u32 = @intCast ((fy >> 32 ) & 0x7fffffff );
const ly : u32 = @truncate (fy );
if (hy | ly == 0 ) {
return Complex (f64 ).init (@exp (x ), y );
}
const fx : u64 = @bitCast (x );
const hx : u32 = @intCast (fx >> 32 );
const lx : u32 = @truncate (fx );
if ((hx & 0x7fffffff ) | lx == 0 ) {
return Complex (f64 ).init (@cos (y ), @sin (y ));
}
if (hy >= 0x7ff00000 ) {
if (lx != 0 or (hx & 0x7fffffff ) != 0x7ff00000 ) {
return Complex (f64 ).init (y - y , y - y );
}
else if (hx & 0x80000000 != 0 ) {
return Complex (f64 ).init (0 , 0 );
}
else {
return Complex (f64 ).init (x , y - y );
}
}
if (hx >= exp_overflow and hx <= cexp_overflow ) {
return ldexp_cexp (z , 0 );
}
// - x > cexp_overflow, so exp(x) * s overflows for s > 0
// - x = +-inf
// - x = nan
else {
const exp_x = @exp (x );
return Complex (f64 ).init (exp_x * @cos (y ), exp_x * @sin (y ));
}
}