numpy.幂函数输出结果的混淆

lyfkaqu1  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(144)

我正在努力学习麻木。在this page上,我看到了以下代码:

import numpy as np

arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 5, 6, 8, 2, 33])

newarr = np.power(arr1, arr2)

print(newarr)

以下是结果:

我不明白为什么结果的最后一个元素是零?

mrzz3bfm

mrzz3bfm1#

import numpy as np

arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 5, 6, 8, 2, 33])

np.power(arr1, arr2)

print(np.power(arr1, arr2))
#[      1000    3200000  729000000 -520093696       2500          0]

这里有两个元素溢出。

40**8   #-520093696   for  6553600000000
60**33  #0  for 47751966659678405306351616000000000000000000000000000000000
ahy6op9u

ahy6op9u2#

正如Brian已经正确指出的那样,这种行为是Integer Overflow的结果。
当您试图在整数变量中存储大于该变量可以容纳的最大值的值时,会发生整数溢出。C标准将这种情况定义为未定义的行为(意味着任何事情都可能发生)。
您使用的是int64,这意味着最大可存储值是power(2,64)。因为power(33,60) trunkated by power(2,64) is exactly 0,这种行为出现了。

相关问题