我正在尝试执行下一个代码int((226553150 * 1023473145) / 5)
,而python3给了我一个答案46374212988031352
。但是ruby和swift给了我一个答案46374212988031350
。
我想念什么?
答案 0 :(得分:8)
你缺少Python的部门(从Python 3开始)默认是浮动分区,因此你的精度降低了。使用//
代替/
强制整数除法,您将获得相同的结果。
答案 1 :(得分:5)
a / b
是Python 3中的浮点除法。为了执行整数除法,您应该使用//
运算符:
In [3]: (226553150 * 1023473145) // 5
Out[3]: 46374212988031350
浮点除法精度仅限于尾数:
In [19]: (226553150 * 1023473145) / 5
Out[19]: 4.637421298803135e+16
如您所见,Python正确表示所有数字,但最后一个。你也可以用它做一些有趣的技巧:
In [20]: int((226553150 * 1023473145) / 5)
Out[20]: 46374212988031352
In [21]: int((226553150 * 1023473145) / 5 - 1)
Out[21]: 46374212988031352
In [22]: int((226553150 * 1023473145) / 5 + 1)
Out[22]: 46374212988031352
In [23]: int((226553150 * 1023473145) / 5 - 2)
Out[23]: 46374212988031352
In [24]: int((226553150 * 1023473145) / 5 - 3)
Out[24]: 46374212988031352
In [25]: int((226553150 * 1023473145) / 5 - 4)
Out[25]: 46374212988031344
In [26]: int((226553150 * 1023473145) / 5 + 4)
Out[26]: 46374212988031360
In [27]: int((226553150 * 1023473145) / 5 + 3)
Out[27]: 46374212988031352