| ... | @@ -110,9 +110,7 @@ fn convertRepr(comptime T: type, n: FloatRepr) T { | ... | @@ -110,9 +110,7 @@ fn convertRepr(comptime T: type, n: FloatRepr) T { |
| 110 | q.shiftLeft1(s); // q = p << 1 | 110 | q.shiftLeft1(s); // q = p << 1 |
| 111 | r.shiftLeft1(q); // r = p << 2 | 111 | r.shiftLeft1(q); // r = p << 2 |
| 112 | s.shiftLeft1(r); // p = p << 3 | 112 | s.shiftLeft1(r); // p = p << 3 |
| 113 | q.add(s); // p = (p << 3) + (p << 1) | 113 | s.add(q); // p = (p << 3) + (p << 1) |
| 114 | | | |
| 115 | exp -= 1; | | |
| 116 | | 114 | |
| 117 | while (s.d2 & mask28 != 0) { | 115 | while (s.d2 & mask28 != 0) { |
| 118 | q.shiftRight1(s); | 116 | q.shiftRight1(s); |
| ... | @@ -402,6 +400,13 @@ test "fmt.parseFloat" { | ... | @@ -402,6 +400,13 @@ test "fmt.parseFloat" { |
| 402 | expectEqual((try parseFloat(T, "+0")), 0.0); | 400 | expectEqual((try parseFloat(T, "+0")), 0.0); |
| 403 | expectEqual((try parseFloat(T, "-0")), 0.0); | 401 | expectEqual((try parseFloat(T, "-0")), 0.0); |
| 404 | | 402 | |
| | 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 | |
| 405 | expect(approxEq(T, try parseFloat(T, "3.141"), 3.141, epsilon)); | 410 | expect(approxEq(T, try parseFloat(T, "3.141"), 3.141, epsilon)); |
| 406 | expect(approxEq(T, try parseFloat(T, "-3.141"), -3.141, epsilon)); | 411 | expect(approxEq(T, try parseFloat(T, "-3.141"), -3.141, epsilon)); |
| 407 | | 412 | |
| ... | @@ -413,6 +418,9 @@ test "fmt.parseFloat" { | ... | @@ -413,6 +418,9 @@ test "fmt.parseFloat" { |
| 413 | expectEqual((try parseFloat(T, "-INF")), -std.math.inf(T)); | 418 | expectEqual((try parseFloat(T, "-INF")), -std.math.inf(T)); |
| 414 | | 419 | |
| 415 | if (T != f16) { | 420 | 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 | |
| 416 | expect(approxEq(T, try parseFloat(T, "123142.1"), 123142.1, epsilon)); | 424 | expect(approxEq(T, try parseFloat(T, "123142.1"), 123142.1, epsilon)); |
| 417 | expect(approxEq(T, try parseFloat(T, "-123142.1124"), T(-123142.1124), epsilon)); | 425 | expect(approxEq(T, try parseFloat(T, "-123142.1124"), T(-123142.1124), epsilon)); |
| 418 | expect(approxEq(T, try parseFloat(T, "0.7062146892655368"), T(0.7062146892655368), epsilon)); | 426 | expect(approxEq(T, try parseFloat(T, "0.7062146892655368"), T(0.7062146892655368), epsilon)); |