摘要 接计算机的错误计算(六十一),继续讨论(六十)中错误计算的原因。
在(六十一),我们讨论了 的精度与取余运算的第1个参数的类型:64位的浮点数。本节探讨
的精度,也即讨论取余运算的第2个参数的类型。
若将 math.pi 代入 float 函数,则取余后的余数与(六十)中没有 float 时的余数相同:
这样,从一个方面说明,在执行取余运算时,Python math库中的 也是64位的浮点数。或者直接输出 math.pi 的值:
而这个值确实是 64位的浮点数:
那么现在有个问题: 的精度够吗?在(六十一),我们知道,
必须取到所有整数数字,才有可能得到正确结果。现在假设
已经满足要求,那么
满足要求吗?最小要求是多少呢?
不妨先试试:
然而,
两个余数的余弦分别为(其中后者为正确结果):
所以,(六十)中的 math,pi 的精度不够。这样,由于不论是 还是
, 均为64位的浮点数,所以,(六十)中的输出只能是错上加错的结果。
那么,究竟取多少位呢?再取 50位试试:
因此,50位时也是错误结果。
再问一句,该取多少位呢?