计算机的错误计算(四)

摘要  探讨了计算机对一元二次方程的计算精度问题。援引国外著名学者的话:“虽然求根公式在数学上是简单的, 但在数值计算中它更具挑战性. 我们既不能保证对求根公式的正确计算, 也不能确定根的精确度”。

       众所周知,给定一个一元二次方程 

ax^2+bx+c=0\, (a\neq0),

其求根公式为

x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}.

       下面通过一个案例,我们来讨论计算机程序对求根公式的的计算精度。

例1. 设 a=10^{-17}, b=-10^{17}, c=10^{17},计算其较小的根[1]。

       若在 Visual Studio 2010 中用下列C语言代码计算

则输出为0;而正确结果为1。因此,计算机输出了错误结果。

       如果您不便于编程验证,最省事的方法是拷贝下列式子 

(-(-1e17)-((-1e17)^2-4*(1e-17)*(1e17))^0.5)/(2*(1e-17))

到 Excel 的单元格中计算(先输入 = ,然后 粘贴进去,再 回车),输出同样为错误结果0。

       事实上,对于一元二次方程的求根问题,文献[2]早已给出评价: “虽然求根公式在数学上是简单的, 但在数值计算中它更具挑战性。我们既不能保证对求根公式的正确计算, 也不能确定根的精确度(..., Numerically, the problem is more challenging, as neither the successful evaluation of ... nor the accuracy of the computed roots can be taken for granted.).”

参考文献

[1] Ward Cheney, David Kincaid. Numerical Mathematics and Computing. 6th Ed. CA: Thomson Higher Education, 2008. 71

[2] Nicholas J. Higham. Accuracy and Stability of Numerical Algorithms. 2nd Ed. Philadelphia: SIAM, 2002. 10

  • 21
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值