关于 Python 中浮点数单精度和双精度的问题
今天遇到一个问题,计算 π 值可以使用 Machin 方法。Machin 公式如下:
arctg函数可由泰勒级数(用无限项连加式 —— 级数来表示一个函数)算出,公式如下:
当然,公式不重要,只是一个交替加减的级数。
代码实现如下:
# 使用 Machin 方法计算pi
def arctg(x, N=5):
a = [x**i/i for i in range(1, N+1, 4)] # 先算所有加项
b = [x**i/i for i in range(3, N+1, 4)] # 后算所有减项
return sum(a) - sum(b)
def arctg2(x, N=5):
return sum([(-1)**(i-1)*x**(2*i-1)/(2*i-1) for i in range(1, N+1)]) # 顺序一加一减
print(arctg(0.1))
print(arctg2(0.1)
arctg是先计算所有加项再计算所有减项,arctg2则是顺序的一加一减,最终结果的小数点7位以后就不一样了:
难道前者是单精度,后者是双精度?