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
洞察をいただければ幸いです。ありがとうございました!