| ... | @@ -24,6 +24,10 @@ pub fn isFinite(x: anytype) bool { | ... | @@ -24,6 +24,10 @@ pub fn isFinite(x: anytype) bool { |
| 24 | const bits = @bitCast(u64, x); | 24 | const bits = @bitCast(u64, x); |
| 25 | return bits & (maxInt(u64) >> 1) < (0x7FF << 52); | 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 | else => { | 31 | else => { |
| 28 | @compileError("isFinite not implemented for " ++ @typeName(T)); | 32 | @compileError("isFinite not implemented for " ++ @typeName(T)); |
| 29 | }, | 33 | }, |
| ... | @@ -37,10 +41,24 @@ test "math.isFinite" { | ... | @@ -37,10 +41,24 @@ test "math.isFinite" { |
| 37 | expect(isFinite(@as(f32, -0.0))); | 41 | expect(isFinite(@as(f32, -0.0))); |
| 38 | expect(isFinite(@as(f64, 0.0))); | 42 | expect(isFinite(@as(f64, 0.0))); |
| 39 | expect(isFinite(@as(f64, -0.0))); | 43 | expect(isFinite(@as(f64, -0.0))); |
| | 44 | expect(isFinite(@as(f128, 0.0))); |
| | 45 | expect(isFinite(@as(f128, -0.0))); |
| | 46 | |
| 40 | expect(!isFinite(math.inf(f16))); | 47 | expect(!isFinite(math.inf(f16))); |
| 41 | expect(!isFinite(-math.inf(f16))); | 48 | expect(!isFinite(-math.inf(f16))); |
| 42 | expect(!isFinite(math.inf(f32))); | 49 | expect(!isFinite(math.inf(f32))); |
| 43 | expect(!isFinite(-math.inf(f32))); | 50 | expect(!isFinite(-math.inf(f32))); |
| 44 | expect(!isFinite(math.inf(f64))); | 51 | expect(!isFinite(math.inf(f64))); |
| 45 | expect(!isFinite(-math.inf(f64))); | 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 | } |