Commit 5fbda2c579

Marc Tiehuis <marc@tiehu.is>
2022-05-03 07:14:01
temporary fix for stage2/stage1 f128 rounding discrepency
This is only to get tests running again. The root issue should be fixed in stage1 so rounding is consistent between stages.
1 parent bbfe223
Changed files (2)
lib
test
behavior
lib/std/fmt.zig
@@ -1842,7 +1842,6 @@ pub const ParseFloatError = @import("fmt/parse_float.zig").ParseFloatError;
 
 test {
     _ = parseFloat;
-    _ = parseHexFloat;
 }
 
 pub fn charToDigit(c: u8, radix: u8) (error{InvalidCharacter}!u8) {
test/behavior/math.zig
@@ -778,8 +778,14 @@ test "quad hex float literal parsing accurate" {
                 try expect(@bitCast(u128, f) == 0x40042eab345678439abcdefea5678234);
             }
             {
-                var f: f128 = 0x1.edcb34a235253948765432134674fp-1;
-                try expect(@bitCast(u128, f) == 0x3ffeedcb34a235253948765432134674);
+                // TODO: modify stage1/parse_f128.c to use round-to-even
+                if (builtin.zig_backend == .stage1) {
+                    var f: f128 = 0x1.edcb34a235253948765432134674fp-1;
+                    try expect(@bitCast(u128, f) == 0x3ffeedcb34a235253948765432134674); // round-down
+                } else {
+                    var f: f128 = 0x1.edcb34a235253948765432134674fp-1;
+                    try expect(@bitCast(u128, f) == 0x3ffeedcb34a235253948765432134675); // round-to-even
+                }
             }
             {
                 var f: f128 = 0x1.353e45674d89abacc3a2ebf3ff4ffp-50;