fn atanh_32(x: f32) f32
fn atanh_32(x: f32) f32 { const u = @as(u32, @bitCast(x)); const i = u & 0x7FFFFFFF; const s = u >> 31; var y = @as(f32, @bitCast(i)); // |x| if (y == 1.0) { return math.copysign(math.inf(f32), x); } if (u < 0x3F800000 - (1 << 23)) { if (u < 0x3F800000 - (32 << 23)) { // underflow if (u < (1 << 23)) { mem.doNotOptimizeAway(y * 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; }