diff options
| author | LemonBoy <thatlemon@gmail.com> | 2021-04-11 21:27:39 +0200 |
|---|---|---|
| committer | LemonBoy <thatlemon@gmail.com> | 2021-04-11 21:27:39 +0200 |
| commit | 44f8ce690ddd406fc1a9caa63d9c0741f4afb3a0 (patch) | |
| tree | bf5dfad2c0a52184f6e1e9ccea51362cf718c9be | |
| parent | 8d94dc625b34832af0e85c16fe4d64ee19c2e74e (diff) | |
| download | zig-44f8ce690ddd406fc1a9caa63d9c0741f4afb3a0.tar.gz zig-44f8ce690ddd406fc1a9caa63d9c0741f4afb3a0.zip | |
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.
| -rw-r--r-- | lib/std/special/c.zig | 2 | ||||
| -rw-r--r-- | test/stage1/behavior/bugs/920.zig | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/lib/std/special/c.zig b/lib/std/special/c.zig index 51cbafc133..f24bedd262 100644 --- a/lib/std/special/c.zig +++ b/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; diff --git a/test/stage1/behavior/bugs/920.zig b/test/stage1/behavior/bugs/920.zig index 10c002f6ba..72854956a1 100644 --- a/test/stage1/behavior/bugs/920.zig +++ b/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]); } } |
