AncilunKiang 2023-10-12 23:16 采纳率: 0%
浏览 56

Python中浮点数单精度和双精度

关于 Python 中浮点数单精度和双精度的问题

今天遇到一个问题,计算 π 值可以使用 Machin 方法。Machin 公式如下:

img

arctg函数可由泰勒级数(用无限项连加式 —— 级数来表示一个函数)算出,公式如下:

img

当然,公式不重要,只是一个交替加减的级数。

代码实现如下:

# 使用 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位以后就不一样了:

img

难道前者是单精度,后者是双精度?

  • 写回答

3条回答 默认 最新

  • 梦幻精灵_cq 2023-10-12 23:25
    关注
    • 不是单精度或者双精度,而是浮点数的二进制计算误差造成的。
      我认为,按照公式一加一减算才好,如果没有浮点数的误差,两种算法,都是应该完全一样的。
    评论

报告相同问题?

问题事件

  • 创建了问题 10月12日