2017-11-27 01:51:52 +00:00
|
|
|
# test parsing of floats
|
|
|
|
|
2020-03-23 02:26:08 +00:00
|
|
|
inf = float("inf")
|
2017-11-27 01:51:52 +00:00
|
|
|
|
|
|
|
# it shouldn't matter where the decimal point is if the exponent balances the value
|
2020-03-23 02:26:08 +00:00
|
|
|
print(float("1234") - float("0.1234e4"))
|
|
|
|
print(float("1.015625") - float("1015625e-6"))
|
2017-11-27 01:51:52 +00:00
|
|
|
|
|
|
|
# very large integer part with a very negative exponent should cancel out
|
2020-03-23 02:26:08 +00:00
|
|
|
print("%.4e" % float("9" * 60 + "e-60"))
|
|
|
|
print("%.4e" % float("9" * 60 + "e-40"))
|
2017-11-27 01:51:52 +00:00
|
|
|
|
|
|
|
# many fractional digits
|
2020-03-23 02:26:08 +00:00
|
|
|
print(float("." + "9" * 70))
|
|
|
|
print(float("." + "9" * 70 + "e20"))
|
|
|
|
print(float("." + "9" * 70 + "e-50") == float("1e-50"))
|
2017-11-27 01:51:52 +00:00
|
|
|
|
|
|
|
# tiny fraction with large exponent
|
2020-03-23 02:26:08 +00:00
|
|
|
print(float("." + "0" * 60 + "1e10") == float("1e-51"))
|
|
|
|
print(float("." + "0" * 60 + "9e25") == float("9e-36"))
|
|
|
|
print(float("." + "0" * 60 + "9e40") == float("9e-21"))
|
2018-02-08 03:02:50 +00:00
|
|
|
|
|
|
|
# ensure that accuracy is retained when value is close to a subnormal
|
2020-03-23 02:26:08 +00:00
|
|
|
print(float("1.00000000000000000000e-37"))
|
|
|
|
print(float("10.0000000000000000000e-38"))
|
|
|
|
print(float("100.000000000000000000e-39"))
|
2018-05-21 03:05:40 +00:00
|
|
|
|
|
|
|
# very large exponent literal
|
2020-03-23 02:26:08 +00:00
|
|
|
print(float("1e4294967301"))
|
|
|
|
print(float("1e-4294967301"))
|
|
|
|
print(float("1e18446744073709551621"))
|
|
|
|
print(float("1e-18446744073709551621"))
|
2018-09-20 12:26:53 +00:00
|
|
|
|
|
|
|
# check small decimals are as close to their true value as possible
|
|
|
|
for n in range(1, 10):
|
2020-03-23 02:26:08 +00:00
|
|
|
print(float("0.%u" % n) == n / 10)
|