diff options
author | Dan Ellis <dpwe@ee.columbia.edu> | 2022-07-28 10:49:18 -0400 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2022-08-12 23:53:34 +1000 |
commit | 6f4d424f461bede1afb69637763f4fce5f27cd90 (patch) | |
tree | cb1cb0273073f9ca3d416a721b36f4850d59e3cd /tests/float/float_format.py | |
parent | 6cd2e4191803e95580bdfc57c06ea818454a25d1 (diff) | |
download | micropython-6f4d424f461bede1afb69637763f4fce5f27cd90.tar.gz micropython-6f4d424f461bede1afb69637763f4fce5f27cd90.zip |
py/formatfloat: Use pow(10, e) instead of pos/neg_pow lookup tables.
Rework the conversion of floats to decimal strings so it aligns precisely
with the conversion of strings to floats in parsenum.c. This is to avoid
rendering 1eX as 9.99999eX-1 etc. This is achieved by removing the power-
of-10 tables and using pow() to compute the exponent directly, and that's
done efficiently by first estimating the power-of-10 exponent from the
power-of-2 exponent in the floating-point representation.
Code size is reduced by roughly 100 to 200 bytes by this commit.
Signed-off-by: Dan Ellis <dan.ellis@gmail.com>
Diffstat (limited to 'tests/float/float_format.py')
-rw-r--r-- | tests/float/float_format.py | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/tests/float/float_format.py b/tests/float/float_format.py index 4c8a217567..98ed0eb096 100644 --- a/tests/float/float_format.py +++ b/tests/float/float_format.py @@ -17,3 +17,11 @@ print("%.2e" % float("9" * 40 + "e-21")) # check a case that would render negative digit values, eg ")" characters # the string is converted back to a float to check for no illegal characters float("%.23e" % 1e-80) + +# Check a problem with malformed "e" format numbers on the edge of 1.0e-X. +for r in range(38): + s = "%.12e" % float("1e-" + str(r)) + # It may format as 1e-r, or 9.999...e-(r+1), both are OK. + # But formatting as 0.999...e-r is NOT ok. + if s[0] == "0": + print("FAIL:", s) |