fn asinh64(x: f64) f64
fn asinh64(x: f64) f64 { const u = @as(u64, @bitCast(x)); const e = (u >> 52) & 0x7FF; const s = u >> 63; var rx = @as(f64, @bitCast(u & (maxInt(u64) >> 1))); // |x| // |x| >= 0x1p26 or inf or nan if (e >= 0x3FF + 26) { rx = @log(rx) + 0.693147180559945309417232121458176568; } // |x| >= 2 else if (e >= 0x3FF + 1) { rx = @log(2 * rx + 1 / (@sqrt(rx * rx + 1) + rx)); } // |x| >= 0x1p-12, up to 1.6ulp error else if (e >= 0x3FF - 26) { rx = math.log1p(rx + rx * rx / (@sqrt(rx * rx + 1) + 1)); } // |x| < 0x1p-12, inexact if x != 0 else { mem.doNotOptimizeAway(rx + 0x1.0p120); } return if (s != 0) -rx else rx; }