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;
1010pub fn fabs(x: var) @typeOf(x) {
1111 const T = @typeOf(x);
1212 return switch (T) {
13 f16 => fabs16(x),
1314 f32 => fabs32(x),
1415 f64 => fabs64(x),
1516 else => @compileError("fabs not implemented for " ++ @typeName(T)),
1617 };
1718}
1819
20fn fabs16(x: f16) f16 {
21 var u = @bitCast(u16, x);
22 u &= 0x7FFF;
23 return @bitCast(f16, u);
24}
25
1926fn fabs32(x: f32) f32 {
2027 var u = @bitCast(u32, x);
2128 u &= 0x7FFFFFFF;
......@@ -29,10 +36,16 @@ fn fabs64(x: f64) f64 {
2936}
3037
3138test "math.fabs" {
39 assert(fabs(f16(1.0)) == fabs16(1.0));
3240 assert(fabs(f32(1.0)) == fabs32(1.0));
3341 assert(fabs(f64(1.0)) == fabs64(1.0));
3442}
3543
44test "math.fabs16" {
45 assert(fabs16(1.0) == 1.0);
46 assert(fabs16(-1.0) == 1.0);
47}
48
3649test "math.fabs32" {
3750 assert(fabs32(1.0) == 1.0);
3851 assert(fabs32(-1.0) == 1.0);
......@@ -43,6 +56,12 @@ test "math.fabs64" {
4356 assert(fabs64(-1.0) == 1.0);
4457}
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
4665test "math.fabs32.special" {
4766 assert(math.isPositiveInf(fabs(math.inf(f32))));
4867 assert(math.isPositiveInf(fabs(-math.inf(f32))));