authorgravatar for info@bnoordhuis.nlBen Noordhuis <info@bnoordhuis.nl> 2018-06-30 01:44:54+02:00
committergravatar for info@bnoordhuis.nlBen Noordhuis <info@bnoordhuis.nl> 2018-06-30 01:58:17+02:00
log30b75ae3539128cf7f12ef84db15ad91f54f0de2
tree0348aa8c07cc5b5c0742f88f1f86cc04ede39eca
parenta36d7b613185c28c508bcc7b0e8b580a0ffd5e28

add std.math f16 isfinite support

refs #1122

1 files changed, 8 insertions(+), 0 deletions(-)

std/math/isfinite.zig+8
...@@ -5,6 +5,10 @@ const assert = std.debug.assert;...@@ -5,6 +5,10 @@ const assert = std.debug.assert;
5pub fn isFinite(x: var) bool {5pub 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}
2125
22test "math.isFinite" {26test "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)));