forked from Lephenixnoir/PythonExtra
6f4d424f46
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>
19 lines
594 B
Python
19 lines
594 B
Python
# Test formatting of very large ints.
|
|
# Relies on double-precision floats.
|
|
|
|
import array
|
|
import sys
|
|
|
|
# Challenging way to express 1e200 and 1e100.
|
|
print("{:.12e}".format(float("9" * 400 + "e-200")))
|
|
print("{:.12e}".format(float("9" * 400 + "e-300")))
|
|
|
|
# These correspond to the binary representation of 1e200 in float64s:
|
|
v1 = 0x54B249AD2594C37D # 1e100
|
|
v2 = 0x6974E718D7D7625A # 1e200
|
|
print("{:.12e}".format(array.array("d", v1.to_bytes(8, sys.byteorder))[0]))
|
|
print("{:.12e}".format(array.array("d", v2.to_bytes(8, sys.byteorder))[0]))
|
|
|
|
for i in range(300):
|
|
print(float("1e" + str(i)))
|