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/ › tanh.zig › tanh64
tanh64
tanh.tanh64
fn tanh64 (z : Complex (f64 )) Complex (f64 )
File
Code
fn tanh64 (z : Complex (f64 )) Complex (f64 ) {
const x = z .re ;
const y = z .im ;
const fx : u64 = @bitCast (x );
// fits in range.
const hx : u32 = @intCast (fx >> 32 );
const lx : u32 = @truncate (fx );
const ix = hx & 0x7fffffff ;
if (ix >= 0x7ff00000 ) {
if ((ix & 0xfffff ) | lx != 0 ) {
const r = if (y == 0 ) y else x * y ;
return Complex (f64 ).init (x , r );
}
const xx : f64 = @bitCast ((@as (u64 , hx - 0x40000000 ) << 32 ) | lx );
const r = if (math .isInf (y )) y else @sin (y ) * @cos (y );
return Complex (f64 ).init (xx , math .copysign (@as (f64 , 0.0 ), r ));
}
if (!math .isFinite (y )) {
const r = if (ix != 0 ) y - y else x ;
return Complex (f64 ).init (r , y - y );
}
if (ix >= 0x40360000 ) {
const exp_mx = @exp (-@abs (x ));
return Complex (f64 ).init (math .copysign (@as (f64 , 1.0 ), x ), 4 * @sin (y ) * @cos (y ) * exp_mx * exp_mx );
}
const t = @tan (y );
const beta = 1.0 + t * t ;
const s = math .sinh (x );
const rho = @sqrt (1 + s * s );
const den = 1 + beta * s * s ;
return Complex (f64 ).init ((beta * rho * s ) / den , t / den );
}