authorgravatar for vegai@iki.fiVesa Kaihlavirta <vegai@iki.fi> 2019-09-01 13:27:26+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-09-03 13:45:02-04:00
loge9530ce97bbbda9724dce3d6755217fd7880955c
tree45af716ef9a15fa9da6a1aea35cda3fd7e57e098
parentbdac2ba9dd2efc4ec1b6ecbb743539f469a09102

Fix addition direction, remove superfluous loop counter, add tests


1 files changed, 11 insertions(+), 3 deletions(-)

std/fmt/parse_float.zig+11-3
......@@ -110,9 +110,7 @@ fn convertRepr(comptime T: type, n: FloatRepr) T {
110110 q.shiftLeft1(s); // q = p << 1
111111 r.shiftLeft1(q); // r = p << 2
112112 s.shiftLeft1(r); // p = p << 3
113 q.add(s); // p = (p << 3) + (p << 1)
114
115 exp -= 1;
113 s.add(q); // p = (p << 3) + (p << 1)
116114
117115 while (s.d2 & mask28 != 0) {
118116 q.shiftRight1(s);
......@@ -402,6 +400,13 @@ test "fmt.parseFloat" {
402400 expectEqual((try parseFloat(T, "+0")), 0.0);
403401 expectEqual((try parseFloat(T, "-0")), 0.0);
404402
403 expectEqual((try parseFloat(T, "0e0")), 0);
404 expectEqual((try parseFloat(T, "2e3")), 2000.0);
405 expectEqual((try parseFloat(T, "1e0")), 1.0);
406 expectEqual((try parseFloat(T, "-2e3")), -2000.0);
407 expectEqual((try parseFloat(T, "-1e0")), -1.0);
408 expectEqual((try parseFloat(T, "1.234e3")), 1234);
409
405410 expect(approxEq(T, try parseFloat(T, "3.141"), 3.141, epsilon));
406411 expect(approxEq(T, try parseFloat(T, "-3.141"), -3.141, epsilon));
407412
......@@ -413,6 +418,9 @@ test "fmt.parseFloat" {
413418 expectEqual((try parseFloat(T, "-INF")), -std.math.inf(T));
414419
415420 if (T != f16) {
421 expect(approxEq(T, try parseFloat(T, "1e-2"), 0.01, epsilon));
422 expect(approxEq(T, try parseFloat(T, "1234e-2"), 12.34, epsilon));
423
416424 expect(approxEq(T, try parseFloat(T, "123142.1"), 123142.1, epsilon));
417425 expect(approxEq(T, try parseFloat(T, "-123142.1124"), T(-123142.1124), epsilon));
418426 expect(approxEq(T, try parseFloat(T, "0.7062146892655368"), T(0.7062146892655368), epsilon));