1# test parsing of floats 2 3inf = float("inf") 4 5# it shouldn't matter where the decimal point is if the exponent balances the value 6print(float("1234") - float("0.1234e4")) 7print(float("1.015625") - float("1015625e-6")) 8 9# very large integer part with a very negative exponent should cancel out 10print("%.4e" % float("9" * 60 + "e-60")) 11print("%.4e" % float("9" * 60 + "e-40")) 12 13# many fractional digits 14print(float("." + "9" * 70)) 15print(float("." + "9" * 70 + "e20")) 16print(float("." + "9" * 70 + "e-50") == float("1e-50")) 17 18# tiny fraction with large exponent 19print(float("." + "0" * 60 + "1e10") == float("1e-51")) 20print(float("." + "0" * 60 + "9e25") == float("9e-36")) 21print(float("." + "0" * 60 + "9e40") == float("9e-21")) 22 23# ensure that accuracy is retained when value is close to a subnormal 24print(float("1.00000000000000000000e-37")) 25print(float("10.0000000000000000000e-38")) 26print(float("100.000000000000000000e-39")) 27 28# very large exponent literal 29print(float("1e4294967301")) 30print(float("1e-4294967301")) 31print(float("1e18446744073709551621")) 32print(float("1e-18446744073709551621")) 33 34# check small decimals are as close to their true value as possible 35for n in range(1, 10): 36 print(float("0.%u" % n) == n / 10) 37