fn atanh_64(x: f64) f64
fn atanh_64(x: f64) f64 { const u: u64 = @bitCast(x); const e = (u >> 52) & 0x7FF; const s = u >> 63; var y: f64 = @bitCast(u & (maxInt(u64) >> 1)); // |x| if (y == 1.0) { return math.copysign(math.inf(f64), x); } if (e < 0x3FF - 1) { if (e < 0x3FF - 32) { // underflow if (e == 0) { mem.doNotOptimizeAway(@as(f32, @floatCast(y))); } } // |x| < 0.5 else { y = 0.5 * math.log1p(2 * y + 2 * y * y / (1 - y)); } } else { y = 0.5 * math.log1p(2 * (y / (1 - y))); } return if (s != 0) -y else y; }