对 numpy 数组进行操作会为大数提供不正确的值
Operating on numpy array gives incorrect values for large numbers
我需要对一些相当大的数字进行运算。在这里,我试图在数组中取一个大数的立方体。
import numpy as np
array=np.array([149597500000,3,4],dtype=np.int64)
print(array**3)
这给出了
[4258029614102052864 27 64]
后两个值是正确的,但第一个值相差许多数量级。相比之下,
print(149597500000**3)
给予
3347904087604984375000000000000000
这是正确的结果。这与整数溢出有关吗?如果是这样,为什么在数组外执行操作不会导致溢出?我该如何解决这个问题?对不起,如果这是一个基本问题;我从来没有正式地学过 Python。
我会说立方体的第一个数字的位数至少为 3*log2(149597500000)+1=113。
这不适合 64 位
a = 149597500000
b= a**3
print(a.bit_length(), b.bit_length())
returns: 38, 112
您可以使用 dtype=object 或 np.float64 将大数存储在 numpy 中,参见
我需要对一些相当大的数字进行运算。在这里,我试图在数组中取一个大数的立方体。
import numpy as np
array=np.array([149597500000,3,4],dtype=np.int64)
print(array**3)
这给出了
[4258029614102052864 27 64]
后两个值是正确的,但第一个值相差许多数量级。相比之下,
print(149597500000**3)
给予
3347904087604984375000000000000000
这是正确的结果。这与整数溢出有关吗?如果是这样,为什么在数组外执行操作不会导致溢出?我该如何解决这个问题?对不起,如果这是一个基本问题;我从来没有正式地学过 Python。
我会说立方体的第一个数字的位数至少为 3*log2(149597500000)+1=113。 这不适合 64 位
a = 149597500000
b= a**3
print(a.bit_length(), b.bit_length())
returns: 38, 112
您可以使用 dtype=object 或 np.float64 将大数存储在 numpy 中,参见