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
log1abc9252922f242b801fe88533b482a18724237d
tree67ca4e88d72dc60dbcafa2a47ca652e83d4dada3
parentf36b095b5ff2176f357d84a9924740324b069765

add std.math f16 fabs support

refs #1122

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

std/math/fabs.zig+19
...@@ -10,12 +10,19 @@ const assert = std.debug.assert;...@@ -10,12 +10,19 @@ const assert = std.debug.assert;
10pub fn fabs(x: var) @typeOf(x) {10pub fn fabs(x: var) @typeOf(x) {
11 const T = @typeOf(x);11 const T = @typeOf(x);
12 return switch (T) {12 return switch (T) {
13 f16 => fabs16(x),
13 f32 => fabs32(x),14 f32 => fabs32(x),
14 f64 => fabs64(x),15 f64 => fabs64(x),
15 else => @compileError("fabs not implemented for " ++ @typeName(T)),16 else => @compileError("fabs not implemented for " ++ @typeName(T)),
16 };17 };
17}18}
1819
20fn fabs16(x: f16) f16 {
21 var u = @bitCast(u16, x);
22 u &= 0x7FFF;
23 return @bitCast(f16, u);
24}
25
19fn fabs32(x: f32) f32 {26fn fabs32(x: f32) f32 {
20 var u = @bitCast(u32, x);27 var u = @bitCast(u32, x);
21 u &= 0x7FFFFFFF;28 u &= 0x7FFFFFFF;
...@@ -29,10 +36,16 @@ fn fabs64(x: f64) f64 {...@@ -29,10 +36,16 @@ fn fabs64(x: f64) f64 {
29}36}
3037
31test "math.fabs" {38test "math.fabs" {
39 assert(fabs(f16(1.0)) == fabs16(1.0));
32 assert(fabs(f32(1.0)) == fabs32(1.0));40 assert(fabs(f32(1.0)) == fabs32(1.0));
33 assert(fabs(f64(1.0)) == fabs64(1.0));41 assert(fabs(f64(1.0)) == fabs64(1.0));
34}42}
3543
44test "math.fabs16" {
45 assert(fabs16(1.0) == 1.0);
46 assert(fabs16(-1.0) == 1.0);
47}
48
36test "math.fabs32" {49test "math.fabs32" {
37 assert(fabs32(1.0) == 1.0);50 assert(fabs32(1.0) == 1.0);
38 assert(fabs32(-1.0) == 1.0);51 assert(fabs32(-1.0) == 1.0);
...@@ -43,6 +56,12 @@ test "math.fabs64" {...@@ -43,6 +56,12 @@ test "math.fabs64" {
43 assert(fabs64(-1.0) == 1.0);56 assert(fabs64(-1.0) == 1.0);
44}57}
4558
59test "math.fabs16.special" {
60 assert(math.isPositiveInf(fabs(math.inf(f16))));
61 assert(math.isPositiveInf(fabs(-math.inf(f16))));
62 assert(math.isNan(fabs(math.nan(f16))));
63}
64
46test "math.fabs32.special" {65test "math.fabs32.special" {
47 assert(math.isPositiveInf(fabs(math.inf(f32))));66 assert(math.isPositiveInf(fabs(math.inf(f32))));
48 assert(math.isPositiveInf(fabs(-math.inf(f32))));67 assert(math.isPositiveInf(fabs(-math.inf(f32))));