我最近收到的一项家庭作业要求我们采用在计算机中执行时可能会造成精度损失的表达式,并对其进行更改以避免这种损失。
不幸的是,这样做的方向还不是很清楚。通过观看各种示例,我知道有一些方法可以做到这一点:使用泰勒级数,如果涉及平方根则使用共轭,或者当两个分数相减时找到一个公分母。
但是,我很难准确地注意到何时会发生精度损失。到目前为止,我唯一确定的是,当您减去两个接近相同的数字时,会发生精度损失,因为高位数字很重要,并且您会从四舍五入中丢失这些数字。
我的问题是我应该寻找哪些其他常见情况,以及哪些被认为是接近它们的“好”方法?
例如,这里有一个问题:
f(x) = tan(x) − sin(x) when x ~ 0
从这三个选择中评估这个的最佳和最差算法是什么:
(a) (1/ cos(x) − 1) sin(x),
(b) (x^3)/2
(c) tan(x)*(sin(x)^2)/(cos(x) + 1).
我知道当 x 接近于零时,tan(x) 和 sin(x) 几乎相同。我不明白这些算法如何或为什么在解决问题方面更好或更差。