aboutsummaryrefslogtreecommitdiff
path: root/std/math/fma.zig
diff options
context:
space:
mode:
authorAndrea Orru <andrea@orru.io>2018-08-06 01:43:19 -0400
committerAndrea Orru <andrea@orru.io>2018-08-06 01:43:19 -0400
commitd2f5e57b68da0b16e5789ca19045ccbcb4ecfa8d (patch)
treee9fa3caec533a0d1e2b434868b2fde1f9240e5c8 /std/math/fma.zig
parent06614b3fa09954464c2e2f32756cacedc178a282 (diff)
parent63a23e848a62d5f167f8d5478de9766cb24aa6eb (diff)
downloadzig-d2f5e57b68da0b16e5789ca19045ccbcb4ecfa8d.tar.gz
zig-d2f5e57b68da0b16e5789ca19045ccbcb4ecfa8d.zip
Merge branch 'master' into zen_stdlib
Diffstat (limited to 'std/math/fma.zig')
-rw-r--r--std/math/fma.zig13
1 files changed, 8 insertions, 5 deletions
diff --git a/std/math/fma.zig b/std/math/fma.zig
index e8d146db34..21faf4118d 100644
--- a/std/math/fma.zig
+++ b/std/math/fma.zig
@@ -5,7 +5,7 @@ const assert = std.debug.assert;
pub fn fma(comptime T: type, x: T, y: T, z: T) T {
return switch (T) {
f32 => fma32(x, y, z),
- f64 => fma64(x, y ,z),
+ f64 => fma64(x, y, z),
else => @compileError("fma not implemented for " ++ @typeName(T)),
};
}
@@ -17,10 +17,10 @@ fn fma32(x: f32, y: f32, z: f32) f32 {
const e = (u >> 52) & 0x7FF;
if ((u & 0x1FFFFFFF) != 0x10000000 or e == 0x7FF or xy_z - xy == z) {
- return f32(xy_z);
+ return @floatCast(f32, xy_z);
} else {
// TODO: Handle inexact case with double-rounding
- return f32(xy_z);
+ return @floatCast(f32, xy_z);
}
}
@@ -71,7 +71,10 @@ fn fma64(x: f64, y: f64, z: f64) f64 {
}
}
-const dd = struct { hi: f64, lo: f64, };
+const dd = struct {
+ hi: f64,
+ lo: f64,
+};
fn dd_add(a: f64, b: f64) dd {
var ret: dd = undefined;
@@ -121,7 +124,7 @@ fn add_and_denorm(a: f64, b: f64, scale: i32) f64 {
var sum = dd_add(a, b);
if (sum.lo != 0) {
var uhii = @bitCast(u64, sum.hi);
- const bits_lost = -i32((uhii >> 52) & 0x7FF) - scale + 1;
+ const bits_lost = -@intCast(i32, (uhii >> 52) & 0x7FF) - scale + 1;
if ((bits_lost != 1) == (uhii & 1 != 0)) {
const uloi = @bitCast(u64, sum.lo);
uhii += 1 - (((uhii ^ uloi) >> 62) & 2);