我正在努力学习麻木。在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)
以下是结果:
我不明白为什么结果的最后一个元素是零?
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
ahy6op9u2#
正如Brian已经正确指出的那样,这种行为是Integer Overflow的结果。当您试图在整数变量中存储大于该变量可以容纳的最大值的值时,会发生整数溢出。C标准将这种情况定义为未定义的行为(意味着任何事情都可能发生)。您使用的是int64,这意味着最大可存储值是power(2,64)。因为power(33,60) trunkated by power(2,64) is exactly 0,这种行为出现了。
2条答案
按热度按时间mrzz3bfm1#
这里有两个元素溢出。
ahy6op9u2#
正如Brian已经正确指出的那样,这种行为是Integer Overflow的结果。
当您试图在整数变量中存储大于该变量可以容纳的最大值的值时,会发生整数溢出。C标准将这种情况定义为未定义的行为(意味着任何事情都可能发生)。
您使用的是int64,这意味着最大可存储值是power(2,64)。因为power(33,60) trunkated by power(2,64) is exactly 0,这种行为出现了。