我曾认为 Python3 应该能够处理任意长度的数字,但我遇到了一个问题,即它们的行为似乎不一致。
在乘除之后,我的 int 似乎已经改变了它的内部表示,并且不再评估为它以前的自我的匹配。
我正在使用整数,没有任何小数或分数,但它的行为几乎就像它正在失去四舍五入的精度..?
我会很感激任何关于为什么会发生这种情况的见解,如果有什么我应该做不同的事情。我的代码有解决方法,但由于结果违反直觉,我很想知道行为背后的原因;)
Python 3.3.2 (default, Jul 30 2013, 00:52:04)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 313585730727764141482831584863
>>> a
313585730727764141482831584863
>>> b = a*2
>>> c = b /2
>>> a
313585730727764141482831584863
>>> c
3.1358573072776415e+29
>>> a == c
False
如果我使用楼层划分,这似乎可行,但是 -
>>> c = b//2
>>> c
313585730727764141482831584863
>>> a == c
True
Python 2.7 似乎也避免了这种情况,将它们保留在longs
>>> a = 313585730727764141482831584863
>>> a
313585730727764141482831584863L
>>> b = a*2
>>> c = b /2
>>> a
313585730727764141482831584863L
>>> c
313585730727764141482831584863L
>>> a == c
True
我会很感激任何见解!谢谢!