在Python 3.5中,当对偶数进行除法时,为什么除法和地板除法给出不同的答案

在Python 3.5中,当对偶数进行除法时,为什么除法和地板除法给出不同的答案,python,division,Python,Division,我试图除掉一个非常大的偶数1314413183426951221926094199371466905606257453172006030529504645527800951523697620149903056632518542200670200503735247855236758191588365477370656069476 我使用了分区和楼层分区,但它提供了两个不同的答案,我认为应该是相同的。 所以我得到了 有人能告诉我差异的原因吗? 谢谢/真除法总是产生一个浮点结果,而且你不能用浮点数精确

我试图除掉一个非常大的偶数
1314413183426951221926094199371466905606257453172006030529504645527800951523697620149903056632518542200670200503735247855236758191588365477370656069476
我使用了分区和楼层分区,但它提供了两个不同的答案,我认为应该是相同的。 所以我得到了

有人能告诉我差异的原因吗?
谢谢

/
真除法总是产生一个浮点结果,而且你不能用浮点数精确地模拟你的数字:

>>> huge = 13144131834269512219260941993714669605006625743172006030529504645527800951523697620149903055663251854220067020503783524785523675819158836547734770656069476
>>> huge / 2
6.572065917134756e+153
>>> type(huge / 2)
<class 'float'>
浮点使用二进制分数来模拟十进制部分,这意味着对于大多数可能的十进制值来说,这只是一个近似值

将该值转换为
int()
不会恢复丢失的精度

另一方面,地板除法为整数输入生成整数,整数具有任意精度,因此不会丢失任何内容:

>>> type(huge // 2)
<class 'int'>
>>类型(巨大//2)

/
上的
int()
是冗余的<代码>/
产生一个浮点数,浮点数有限制。你超过了它们。虽然你可以从sys.float\u info.mant\u dig中得到尾数,但是说在所有平台上都是53是正确的吗?@LabrysKnossos:它相信Python运行的所有现代平台上都是53,是的。
>>> import sys
>>> sys.float_info.mant_dig
53
>>> type(huge // 2)
<class 'int'>