| ... | ... | @@ -24,6 +24,10 @@ pub fn isFinite(x: anytype) bool { |
| 24 | 24 | const bits = @bitCast(u64, x); |
| 25 | 25 | return bits & (maxInt(u64) >> 1) < (0x7FF << 52); |
| 26 | 26 | }, |
| 27 | f128 => { |
| 28 | const bits = @bitCast(u128, x); |
| 29 | return bits & (maxInt(u128) >> 1) < (0x7FFF << 112); |
| 30 | }, |
| 27 | 31 | else => { |
| 28 | 32 | @compileError("isFinite not implemented for " ++ @typeName(T)); |
| 29 | 33 | }, |
| ... | ... | @@ -37,10 +41,24 @@ test "math.isFinite" { |
| 37 | 41 | expect(isFinite(@as(f32, -0.0))); |
| 38 | 42 | expect(isFinite(@as(f64, 0.0))); |
| 39 | 43 | expect(isFinite(@as(f64, -0.0))); |
| 44 | expect(isFinite(@as(f128, 0.0))); |
| 45 | expect(isFinite(@as(f128, -0.0))); |
| 46 | |
| 40 | 47 | expect(!isFinite(math.inf(f16))); |
| 41 | 48 | expect(!isFinite(-math.inf(f16))); |
| 42 | 49 | expect(!isFinite(math.inf(f32))); |
| 43 | 50 | expect(!isFinite(-math.inf(f32))); |
| 44 | 51 | expect(!isFinite(math.inf(f64))); |
| 45 | 52 | expect(!isFinite(-math.inf(f64))); |
| 53 | expect(!isFinite(math.inf(f128))); |
| 54 | expect(!isFinite(-math.inf(f128))); |
| 55 | |
| 56 | expect(!isFinite(math.nan(f16))); |
| 57 | expect(!isFinite(-math.nan(f16))); |
| 58 | expect(!isFinite(math.nan(f32))); |
| 59 | expect(!isFinite(-math.nan(f32))); |
| 60 | expect(!isFinite(math.nan(f64))); |
| 61 | expect(!isFinite(-math.nan(f64))); |
| 62 | expect(!isFinite(math.nan(f128))); |
| 63 | expect(!isFinite(-math.nan(f128))); |
| 46 | 64 | } |