我是Python 3.6.0的新用户。我正在尝试将2个数字相除,从而产生较大的输出。但是,使用
return ans1 // ans2
使用时会产生55347740058143507128
return int(ans1 / ans2)
产生55347740058143506432。
哪个更准确?为什么呢?
答案 0 :(得分:6)
第一个更精确,因为它给出了精确的整数结果。
第二个代表中间结果为浮点数。浮点数的分辨率有限(53 bits of mantissa),而结果需要66位才能准确表示。这会导致准确性下降。
如果我们看一下两个结果的十六进制表示形式:
>>> hex(55347740058143507128)
'0x3001aac56864d42b8L'
>>> hex(55347740058143506432)
'0x3001aac56864d4000L'
我们可以看到,结果的最低有效位(不适合53位尾数)都设置为零。
一种直接查看四舍五入而不造成除法复杂性的方法是:
>>> int(float(55347740058143507128))
55347740058143506432L
答案 1 :(得分:3)
从这种意义上说,地板整数除法更准确。
此结构int(ans1 / ans2)
的问题在于,结果临时为浮点数(显然,将其转换为整数之前),并向最接近的浮点数取整(取整量取决于的大小)。号码)。甚至可以通过尝试通过浮点数将该值四舍五入来看到这一点:
print(int(float(55347740058143507128)))
打印55347740058143506432
。因此,由于普通/
会导致浮点运算,因此会限制其准确性。