diff options
| author | Damien George <damien.p.george@gmail.com> | 2018-02-08 14:02:50 +1100 |
|---|---|---|
| committer | Damien George <damien.p.george@gmail.com> | 2018-02-08 14:02:50 +1100 |
| commit | b75cb8392bdf5f8c12072eac3adbdaad53d1e8d2 (patch) | |
| tree | 4e02e3f9b22d6496677c97366d981778619556b9 /tests/float | |
| parent | 0c650d427601d5c84bd623d58abc9be5451c576c (diff) | |
py/parsenum: Fix parsing of floats that are close to subnormal.
Prior to this patch, a float literal that was close to subnormal would
have a loss of precision when parsed. The worst case was something like
float('10000000000000000000e-326') which returned 0.0.
Diffstat (limited to 'tests/float')
| -rw-r--r-- | tests/float/float_parse.py | 5 | ||||
| -rw-r--r-- | tests/float/float_parse_doubleprec.py | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/tests/float/float_parse.py b/tests/float/float_parse.py index 448eff3bc..de4ea455f 100644 --- a/tests/float/float_parse.py +++ b/tests/float/float_parse.py @@ -20,3 +20,8 @@ print(float('.' + '9' * 70 + 'e-50') == float('1e-50')) print(float('.' + '0' * 60 + '1e10') == float('1e-51')) print(float('.' + '0' * 60 + '9e25')) print(float('.' + '0' * 60 + '9e40')) + +# ensure that accuracy is retained when value is close to a subnormal +print(float('1.00000000000000000000e-37')) +print(float('10.0000000000000000000e-38')) +print(float('100.000000000000000000e-39')) diff --git a/tests/float/float_parse_doubleprec.py b/tests/float/float_parse_doubleprec.py index 356601130..2ea7842f3 100644 --- a/tests/float/float_parse_doubleprec.py +++ b/tests/float/float_parse_doubleprec.py @@ -14,3 +14,8 @@ print(float('.' + '9' * 400 + 'e-100')) print(float('.' + '0' * 400 + '9e100')) print(float('.' + '0' * 400 + '9e200')) print(float('.' + '0' * 400 + '9e400')) + +# ensure that accuracy is retained when value is close to a subnormal +print(float('1.00000000000000000000e-307')) +print(float('10.0000000000000000000e-308')) +print(float('100.000000000000000000e-309')) |
