阅读该篇的前提是已经阅读过基础阶乘值的求解思路-----python计算给定数字或者数组的阶乘(超链接点击跳转)。这里探讨一个深入的问题,来说明在求解连续阶乘值中可能出现的潜在bug
,比如需要计算2的n次方的值,n
从1
连续取值到101
。来看一段代码:
import numpy as np
import matplotlib.pyplot as plt
class NumpyStudy:
@staticmethod
def calculatePower(x, n):
plt.figure()
plt.plot(n, x ** n)
plt.show()
if __name__ == '__main__':
main = NumpyStudy()
x_ = 2
n_ = np.arange(1, 101)
main.calculatePower(x_, n_)
这时我们对最终得到的结果绘图可以得到如下图像:
这是非常奇怪的,因为我们的阶乘值不可能出现负值,那么这是为什么呢?原因是np.arange(1, 101)
函数在初始化未指定数据类型时默认为int32
类型,而2
的32
次方的数值结果已经超出了32
位二进制数据可以显示的范围。因此我们这里出现了错误。那么有人会说,简单这里设置一个数据类型,变成int64
不就好了?事实时int64
也不行,如果想要得到正确的结果,这里应该使用float64
类型。正确的代码如下:
import numpy as np
import matplotlib.pyplot as plt
class NumpyStudy:
@staticmethod
def calculatePower(x, n):
plt.figure()
plt.plot(n, x ** n)
plt.show()
if __name__ == '__main__':
main = NumpyStudy()
x_ = 2
n_ = np.arange(1, 101, dtype=np.float64)
main.calculatePower(x_, n_)
最终的图像为:
码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~