使用Python复制计算器结果

时间:2014-02-15 22:39:44

标签: python math precision trigonometry

我不知道如何让Python在执行重复正弦时表现得像我的计算器。

我的Python代码:

number = float(.565)
pi = float(math.pi)

for j in range(25):
    number = round(math.sin(number*pi), 16)

返回0.446445551265。

当我使用计算器执行相同操作时,我得到0.4464454868。

无论我对round()使用的精确度如何,我都无法得到与计算器相同的结果。

我也尝试过使用Decimal库,但是没有得到更好的结果。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

以80位十进制数字精度执行,结果以

开头

0.4464455542636494555603375755720232254414694834911

算法的误差分析表明,在每个步骤中,先前的误差乘以大约pi(和当前点的余弦),即大约3,并且当前浮点误差作为噪声添加。因此误差范围是机器epsilon的3 ^ 25倍。

如果一个人慷慨且允许错误取消和实际导数值,也可以说误差放大系数约为2 ^ 25,即双数尾数的53位,最后25个被污染,只有前28个仍然有点可靠,相当于约7-8个可靠的十进制数字,如问题陈述中所反映的那样。

袖珍计算器的内部精度通常比显示的精度大很多,因此在那里找到更精确的结果并不出人意料。