python 3长整数和乘法

Ars*_*sen 5 python

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

我错过了什么?

fil*_*mor 8

你错过了Python的分区(从Python 3开始)默认是一个浮动分区,因此你的精度降低了.使用//而不是强制整数除法/,您将得到相同的结果.


awe*_*oon 5

a / b是Python 3中的浮点除法.为了执行整数除法,您应该使用//运算符:

In [3]: (226553150 * 1023473145) // 5
Out[3]: 46374212988031350
Run Code Online (Sandbox Code Playgroud)

浮点除法精度仅限于尾数大小:

In [19]: (226553150 * 1023473145) / 5
Out[19]: 4.637421298803135e+16
Run Code Online (Sandbox Code Playgroud)

如您所见,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
Run Code Online (Sandbox Code Playgroud)