在python2中然后在python3中计算大量数字时出现奇怪的结果

时间:2019-01-17 09:13:38

标签: python formatting cluster-computing

我尝试计算x =(2 ** 83 +1)/ 3,这在数学上是整数,并且是python-x中的浮点数。 在python 2中,我得到:

x = 2**83 + 1
x = 9671406556917033397649409L

然后

y = x/3 = 3223802185639011132549803L

在python 3中,我得到了:

x = 2**83 + 1
x = 9671406556917033397649409 --> OK

然后

y = x/3 = 3.223802185639011e+24

要比较2个结果,我在python 3中使用了格式字符串指令: z = '%25d' % y,我得到z = '3223802185639010953592832'z = '3223802185639011132549803'在python 2中。 (%i给出相同的结果,非常正常)。 奇怪的是,当我计算3 * Z时,我在python2中得到了很好的结果,而在python3中得到了一个错误的结果。 我看不到测试的问题所在(计算,格式化等等)。 我想使用python 3并显示x = (2**83 + 1)/3而不显示'e+24',但显示所有数字。

有人有主意吗?

我必须补充一点,在python2中使用/或//时,问题仍然相同。从数学上来说,我们得到的结果是整数。我应该说问题出在python 3上,我怎么能得到好的结果(python 3中(2 ** 83 +1)/ 3的整体显示)?

1 个答案:

答案 0 :(得分:0)

您似乎正在寻找整数除法而不是浮点数。

/运算符在Python3中返回浮点数。要在Python3中执行整数除法,请使用//

所以,我想您所需要的只是

(2**83 + 1)//3 

给出

3223802185639011132549803

代替(2**83 + 1)/3

在Python2.7中,///实际上是相同的,除非您执行类似from __future__ import division的操作。