作为其他一些计算的一部分,我注意到我有时将float()
然后int()
函数应用于整数输入。假设:
int(float(x)) == x
如果x是整数?
为什么呢? (或者为什么不呢?)它是否记录在任何地方?
答案 0 :(得分:8)
如果x
需要的精度高于双精度浮点数所提供的精度,则比较将失败。
>>> int(float(10**23))
99999999999999991611392L
答案 1 :(得分:5)
>>> x = 10**300
>>> int(float(x)) == x
False
答案 2 :(得分:4)
为什么呢? (或者为什么不呢?)它是否记录在任何地方?
每个程序员都应该清楚知道的权威指南之一:
What Every Programmer Should Know About Floating-Point Arithmetic
答案 3 :(得分:3)
表单significant_digits * (2 ** exponent)
的所有数字都具有精确表示为浮点数,只要您有足够的位来表示significant_digits
和exponent
。大多数平台使用IEEE 754双重表示,而Python使用平台的双重表示。 IEEE 754双精度为exponent
有11位,significant digits
有52位。只要你的数字符合这些界限,它们就会按预期出现。
请参阅Python's docs on floating point representation和维基百科关于floating points的文章。