摘要 探讨了计算机对一元二次方程的计算精度问题。援引国外著名学者的话:“虽然求根公式在数学上是简单的, 但在数值计算中它更具挑战性. 我们既不能保证对求根公式的正确计算, 也不能确定根的精确度”。
众所周知,给定一个一元二次方程
其求根公式为
下面通过一个案例,我们来讨论计算机程序对求根公式的的计算精度。
例1. 设 ,计算其较小的根[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