| ... | @@ -306,7 +306,7 @@ fn parseRepr(s: []const u8, n: *FloatRepr) !ParseResult { | ... | @@ -306,7 +306,7 @@ fn parseRepr(s: []const u8, n: *FloatRepr) !ParseResult { |
| 306 | | 306 | |
| 307 | State.Exponent => { | 307 | State.Exponent => { |
| 308 | if (isDigit(c)) { | 308 | if (isDigit(c)) { |
| 309 | if (exponent < std.math.maxInt(i32)) { | 309 | if (exponent < std.math.maxInt(i32) / 10) { |
| 310 | exponent *= 10; | 310 | exponent *= 10; |
| 311 | exponent += @intCast(i32, c - '0'); | 311 | exponent += @intCast(i32, c - '0'); |
| 312 | } | 312 | } |
| ... | @@ -417,6 +417,8 @@ test "fmt.parseFloat" { | ... | @@ -417,6 +417,8 @@ test "fmt.parseFloat" { |
| 417 | expectEqual((try parseFloat(T, "inF")), std.math.inf(T)); | 417 | expectEqual((try parseFloat(T, "inF")), std.math.inf(T)); |
| 418 | expectEqual((try parseFloat(T, "-INF")), -std.math.inf(T)); | 418 | expectEqual((try parseFloat(T, "-INF")), -std.math.inf(T)); |
| 419 | | 419 | |
| | 420 | expectEqual(try parseFloat(T, "0.4e0066999999999999999999999999999999999999999999999999999"), std.math.inf(T)); |
| | 421 | |
| 420 | if (T != f16) { | 422 | if (T != f16) { |
| 421 | expect(approxEq(T, try parseFloat(T, "1e-2"), 0.01, epsilon)); | 423 | expect(approxEq(T, try parseFloat(T, "1e-2"), 0.01, epsilon)); |
| 422 | expect(approxEq(T, try parseFloat(T, "1234e-2"), 12.34, epsilon)); | 424 | expect(approxEq(T, try parseFloat(T, "1234e-2"), 12.34, epsilon)); |