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
logbe361790645971446b64dabf21c27a595a40c8fd
tree0f01a7f7b70d12b312e79081d8bed2371a1cbded
parentca444e6191138e6f9977cf2fbceb071134ed6aff

add std.math f16 signbit support

refs #1122

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

std/math/signbit.zig+12
......@@ -5,12 +5,18 @@ const assert = std.debug.assert;
55pub fn signbit(x: var) bool {
66 const T = @typeOf(x);
77 return switch (T) {
8 f16 => signbit16(x),
89 f32 => signbit32(x),
910 f64 => signbit64(x),
1011 else => @compileError("signbit not implemented for " ++ @typeName(T)),
1112 };
1213}
1314
15fn signbit16(x: f16) bool {
16 const bits = @bitCast(u16, x);
17 return bits >> 15 != 0;
18}
19
1420fn signbit32(x: f32) bool {
1521 const bits = @bitCast(u32, x);
1622 return bits >> 31 != 0;
......@@ -22,10 +28,16 @@ fn signbit64(x: f64) bool {
2228}
2329
2430test "math.signbit" {
31 assert(signbit(f16(4.0)) == signbit16(4.0));
2532 assert(signbit(f32(4.0)) == signbit32(4.0));
2633 assert(signbit(f64(4.0)) == signbit64(4.0));
2734}
2835
36test "math.signbit16" {
37 assert(!signbit16(4.0));
38 assert(signbit16(-3.0));
39}
40
2941test "math.signbit32" {
3042 assert(!signbit32(4.0));
3143 assert(signbit32(-3.0));