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