| ... | ... | @@ -5,6 +5,10 @@ const assert = std.debug.assert; |
| 5 | 5 | pub fn isFinite(x: var) bool { |
| 6 | 6 | const T = @typeOf(x); |
| 7 | 7 | switch (T) { |
| 8 | f16 => { |
| 9 | const bits = @bitCast(u16, x); |
| 10 | return bits & 0x7FFF < 0x7C00; |
| 11 | }, |
| 8 | 12 | f32 => { |
| 9 | 13 | const bits = @bitCast(u32, x); |
| 10 | 14 | return bits & 0x7FFFFFFF < 0x7F800000; |
| ... | ... | @@ -20,10 +24,14 @@ pub fn isFinite(x: var) bool { |
| 20 | 24 | } |
| 21 | 25 | |
| 22 | 26 | test "math.isFinite" { |
| 27 | assert(isFinite(f16(0.0))); |
| 28 | assert(isFinite(f16(-0.0))); |
| 23 | 29 | assert(isFinite(f32(0.0))); |
| 24 | 30 | assert(isFinite(f32(-0.0))); |
| 25 | 31 | assert(isFinite(f64(0.0))); |
| 26 | 32 | assert(isFinite(f64(-0.0))); |
| 33 | assert(!isFinite(math.inf(f16))); |
| 34 | assert(!isFinite(-math.inf(f16))); |
| 27 | 35 | assert(!isFinite(math.inf(f32))); |
| 28 | 36 | assert(!isFinite(-math.inf(f32))); |
| 29 | 37 | assert(!isFinite(math.inf(f64))); |