Python 2.7 python 2.7中的整数精度

Python 2.7 python 2.7中的整数精度,python-2.7,Python 2.7,当大整数的长度超过15时,最后的数字设置为0。我怎样才能避免这种情况?比如说, a=[1,100,20,167,52,96,181,0] b = 0 for i in range(8): b = b + a[i]*(2**(8*(i))) print a[i] print "%f" % b b为5105275004226016,但实际值应为5105275004226017 在您的代码中,b被分配给一个整数,而不是浮点类型,因此您可以使用%d”格式来打印它。浮点值具有此特性,因为

当大整数的长度超过15时,最后的数字设置为0。我怎样才能避免这种情况?比如说,

a=[1,100,20,167,52,96,181,0]
b = 0
for i in range(8):
    b = b + a[i]*(2**(8*(i)))
    print a[i]
print "%f" % b

b
为5105275004226016,但实际值应为5105275004226017

在您的代码中,
b
被分配给一个整数,而不是浮点类型,因此您可以使用
%d”
格式来打印它。浮点值具有此特性,因为它们在计算机硬件中以基数2(二进制)分数表示:

a=[1,100,20,167,52,96,181,0]
b = 0
for i in range(8):
    b = b + a[i]*(2**(8*(i)))
    print a[i]
print "%d" % b
打印“%d%f%”(b,b)
的输出:

发件人:

不幸的是,大多数小数不能精确地表示为 二元分数。结果是,一般来说,十进制 您输入的浮点数仅由二进制近似 实际存储在机器中的浮点数

从页面:

在运行Python的典型机器上,有53位精度 可用于Python浮点

因此:

>>> a = 2 ** 53 + 1
>>> a
9007199254740993L
>>> int(float(a))
9007199254740992L
在上面的示例中,通过在
打印
中使用
%f
格式,可以将整数
b
隐式转换为浮点。由于它的大小大于Python中可以精确表示为浮点的大小,因此给出了最接近的53位表示

避免这种情况的最简单方法是将整数打印为整数,格式为
%d

>>> a = 2 ** 53 + 1
>>> a
9007199254740993L
>>> int(float(a))
9007199254740992L