python 3长整数和乘法

时间:2016-02-22 17:29:40

标签: python

我正在尝试执行下一个代码int((226553150 * 1023473145) / 5),而python3给了我一个答案46374212988031352。但是ruby和swift给了我一个答案46374212988031350

我想念什么?

2 个答案:

答案 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