二次方程的不稳定性

时间:2019-09-04 18:04:18

标签: floating-point precision

我试图了解求解与(b)项相比(4ac)项较小的二次方程时出现的精度损失。

我知道我们要减去彼此接近的数字,结果接近于零。但是,如果我们始终以相同的非常小的数字(接近于零)为目标,那么我不十分清楚为什么要使用替代算法来计算该解决方案。我浏览了有关此问题的Wikipedia文章,但我不明白。谁能为我的问题提供更多的见解或资源,让我更好地理解它?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

在经典的二次公式中,(− b ±sqrt( b 2 −4 ac )) /(2 a ),当4 ac 小于 b 2 时,会出现问题,因为:

  • 用于计算的浮点格式具有有限的宽度(精度),因此无法表示 b 2 -4 ac 的准确性很高。 b 2 强制将小数位(指数)设置为高,因此格式的低位处于较高的小数位,并且无法表示4的低值。 ac 很好。
  • 相对于 b 2 −4 ac ,此错误较小,但是当sqrt( b < sup> 2 −4 ac )添加到负数- b 或从正数- b 减去前导位取消,产生较小的结果,相对于较小的结果,误差可能很大。

另一方面,方程式的另一种解决方案是从(正)平方根加到正的- b 或从负的- b减去它得到的。 -不会遇到此问题。它是一个较大的数字,大约为-2 b ,因此sqrt( b 2 -4 ac )相对而言较小。

因此,建议是先计算此解决方案 x 1 ,然后使用它来找到解决方案 x 2 = c /( ax 1 )。