Commit 44f8ce690d

LemonBoy <thatlemon@gmail.com>
2021-04-11 21:27:39
std: Fix typo in sqrt implementation
The code initializes twice `t` instead of `t1`, leaving the latter uninitialized. The problem manifested itself by corrupting the LSBs of the result in unpredictable ways.
1 parent 8d94dc6
Changed files (2)
lib
std
special
test
stage1
behavior
bugs
lib/std/special/c.zig
@@ -874,7 +874,7 @@ export fn sqrt(x: f64) f64 {
 
     r = sign;
     while (r != 0) {
-        t = s1 +% r;
+        t1 = s1 +% r;
         t = s0;
         if (t < ix0 or (t == ix0 and t1 <= ix1)) {
             s1 = t1 +% r;
test/stage1/behavior/bugs/920.zig
@@ -60,6 +60,6 @@ test "bug 920 fixed" {
     };
 
     for (NormalDist1.f) |_, i| {
-        std.testing.expect(NormalDist1.f[i] == NormalDist.f[i]);
+        std.testing.expectEqual(NormalDist1.f[i], NormalDist.f[i]);
     }
 }