diff --git a/std/math.zig b/std/math.zig index 77a630d6434f422a8dcefaa5954130fffb4320e4..c563b4567840492271145b1779e98b1c909a23f1 100644 --- a/std/math.zig +++ b/std/math.zig @@ -17,7 +17,11 @@ pub fn f64_get_neg_inf() -> f64 { } pub fn f64_is_nan(f: f64) -> bool { - 0x7FFFFFFFFFFFFFFF == f64_to_bits(f) // TODO improve to catch all cases + const bits = f64_to_bits(f); + const exp: i64 = i64((bits >> 52) & ((1 << 11) - 1)); + const sig = (bits & ((1 << 52) - 1)) | (1 << 52); + + sig != 0 && exp == (1 << 11) - 1 } pub fn f64_is_inf(f: f64) -> bool {