parent
27b02413dc
commit
a36d7b6131
|
@ -28,6 +28,9 @@ pub const f16_toint = 1.0 / f16_epsilon;
|
|||
pub const nan_u16 = u16(0x7C01);
|
||||
pub const nan_f16 = @bitCast(f16, nan_u16);
|
||||
|
||||
pub const inf_u16 = u16(0x7C00);
|
||||
pub const inf_f16 = @bitCast(f16, inf_u16);
|
||||
|
||||
pub const nan_u32 = u32(0x7F800001);
|
||||
pub const nan_f32 = @bitCast(f32, nan_u32);
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
const std = @import("../index.zig");
|
||||
const math = std.math;
|
||||
const assert = std.debug.assert;
|
||||
|
||||
pub fn inf(comptime T: type) T {
|
||||
return switch (T) {
|
||||
f16 => @bitCast(f16, math.inf_u16),
|
||||
f32 => @bitCast(f32, math.inf_u32),
|
||||
f64 => @bitCast(f64, math.inf_u64),
|
||||
else => @compileError("inf not implemented for " ++ @typeName(T)),
|
||||
|
|
|
@ -5,6 +5,10 @@ const assert = std.debug.assert;
|
|||
pub fn isInf(x: var) bool {
|
||||
const T = @typeOf(x);
|
||||
switch (T) {
|
||||
f16 => {
|
||||
const bits = @bitCast(u16, x);
|
||||
return bits & 0x7FFF == 0x7C00;
|
||||
},
|
||||
f32 => {
|
||||
const bits = @bitCast(u32, x);
|
||||
return bits & 0x7FFFFFFF == 0x7F800000;
|
||||
|
@ -22,6 +26,9 @@ pub fn isInf(x: var) bool {
|
|||
pub fn isPositiveInf(x: var) bool {
|
||||
const T = @typeOf(x);
|
||||
switch (T) {
|
||||
f16 => {
|
||||
return @bitCast(u16, x) == 0x7C00;
|
||||
},
|
||||
f32 => {
|
||||
return @bitCast(u32, x) == 0x7F800000;
|
||||
},
|
||||
|
@ -37,6 +44,9 @@ pub fn isPositiveInf(x: var) bool {
|
|||
pub fn isNegativeInf(x: var) bool {
|
||||
const T = @typeOf(x);
|
||||
switch (T) {
|
||||
f16 => {
|
||||
return @bitCast(u16, x) == 0xFC00;
|
||||
},
|
||||
f32 => {
|
||||
return @bitCast(u32, x) == 0xFF800000;
|
||||
},
|
||||
|
@ -50,10 +60,14 @@ pub fn isNegativeInf(x: var) bool {
|
|||
}
|
||||
|
||||
test "math.isInf" {
|
||||
assert(!isInf(f16(0.0)));
|
||||
assert(!isInf(f16(-0.0)));
|
||||
assert(!isInf(f32(0.0)));
|
||||
assert(!isInf(f32(-0.0)));
|
||||
assert(!isInf(f64(0.0)));
|
||||
assert(!isInf(f64(-0.0)));
|
||||
assert(isInf(math.inf(f16)));
|
||||
assert(isInf(-math.inf(f16)));
|
||||
assert(isInf(math.inf(f32)));
|
||||
assert(isInf(-math.inf(f32)));
|
||||
assert(isInf(math.inf(f64)));
|
||||
|
@ -61,10 +75,14 @@ test "math.isInf" {
|
|||
}
|
||||
|
||||
test "math.isPositiveInf" {
|
||||
assert(!isPositiveInf(f16(0.0)));
|
||||
assert(!isPositiveInf(f16(-0.0)));
|
||||
assert(!isPositiveInf(f32(0.0)));
|
||||
assert(!isPositiveInf(f32(-0.0)));
|
||||
assert(!isPositiveInf(f64(0.0)));
|
||||
assert(!isPositiveInf(f64(-0.0)));
|
||||
assert(isPositiveInf(math.inf(f16)));
|
||||
assert(!isPositiveInf(-math.inf(f16)));
|
||||
assert(isPositiveInf(math.inf(f32)));
|
||||
assert(!isPositiveInf(-math.inf(f32)));
|
||||
assert(isPositiveInf(math.inf(f64)));
|
||||
|
@ -72,10 +90,14 @@ test "math.isPositiveInf" {
|
|||
}
|
||||
|
||||
test "math.isNegativeInf" {
|
||||
assert(!isNegativeInf(f16(0.0)));
|
||||
assert(!isNegativeInf(f16(-0.0)));
|
||||
assert(!isNegativeInf(f32(0.0)));
|
||||
assert(!isNegativeInf(f32(-0.0)));
|
||||
assert(!isNegativeInf(f64(0.0)));
|
||||
assert(!isNegativeInf(f64(-0.0)));
|
||||
assert(!isNegativeInf(math.inf(f16)));
|
||||
assert(isNegativeInf(-math.inf(f16)));
|
||||
assert(!isNegativeInf(math.inf(f32)));
|
||||
assert(isNegativeInf(-math.inf(f32)));
|
||||
assert(!isNegativeInf(math.inf(f64)));
|
||||
|
|
Loading…
Reference in New Issue