【问题标题】:Instability of quadratic equations二次方程的不稳定性
【发布时间】:2019-09-05 18:18:40
【问题描述】:

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

我知道我们正在减去彼此接近的数字,结果接近于零。但是,如果我们总是针对相同的非常小的数字(接近于零),我不太明白为什么我们有替代算法来计算这个解决方案。我浏览了关于这个问题的维基百科文章,但我不明白。谁能为我的问题提供更多见解或资源让我更好地理解它?

感谢您的帮助,非常感谢。

【问题讨论】:

  • 你能提供你提到的维基文章和替代算法吗?
  • 有一个不错的discussion 链接自另一个 SO 问题;我不确定在这里复制它是否是主题。
  • OP 可能指的是this

标签: floating-point precision


【解决方案1】:

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

  • 用于进行计算的浮点格式具有有限的宽度(精度),因此无法表示 b2-4ac 具有良好的准确性。 b2 强制比例(指数)较高,因此格式的低位处于较高比例,无法表示 4 的低值ac 很好。
  • 这个误差相对于b2−4ac来说很小,但是,当sqrt(b2-4ac) 加到负数 -b 或从正数 -b 减去,前导位取消,产生一个小结果,相对于小结果,误差可能很大。

另一方面,方程的另一个解——我们通过将(正)平方根添加到正数 -b 或从负数中减去 -b ——没有这个问题。它是一个较大的数字,大约为 -2b,因此 sqrt(b2-4ac 中的错误) 相对于它来说很小。

因此建议是先计算这个解x1,然后用它求解x2 sub> = c / (ax1).

【讨论】:

  • 感谢 Eric 的详细回答。这让我很清楚。如果我理解正确,这也意味着误差是由最大数的精度决定的。对吗?
  • @Omnistic:舍入错误可能非常复杂。最大值可能非常有影响,但可能还有其他因素。
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2018-11-26
  • 2016-10-18
  • 2020-08-18
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多