计算机的错误计算(六)

摘要  对于简单的多项式计算,计算机也可能输出错误结果;另外,虽然多项式的 Hornor(或秦九韶)形式减少了计算机的运算量,但并不一定能提高计算结果的精度。

例1.  已知下列C代码(其中 x 随机取自(0,1))[1,2]:

float \,\,\,x,z;\\ x=random(0,1);\\ z=x*x*x*x-4*x*x*x+6*x*x-4*x+1;\\

       若 x=0.99993,则理论上 z = 0.2401e-16。但是,实践中,若在Visual Studio 2010 中运行上述代码,则 z 的输出结果为0。这样,计算机给出了错误结果。 

       若改写上述 z 为Hornor(或秦九韶) 形式 ,即代码变为

float \,\,\,x,z;\\ x=random(0,1);\\ z=(((x-4)*x+6)*x-4)*x+1;\\

保持 x 不变,则 z 的输出结果为 -0.22204460492503131e-15。这样,计算机同样给出了错误结果,并且错的更为离谱。

       总结:对于简单的多项式计算,计算机也可能输出错误结果;虽然多项式的 Hornor(或秦九韶)形式减少了计算机的运算量,但并不一定能提高计算结果的精度。

参考文献

[1] 汤恩义, BARR Earl, 苏振东, 等. 程序数值误差的扰动检测与优化. 中国科学: 信息科学, 2014, 44(11): 1445–1466

[2] Goubault E, Putot S. Static analysis of numerical algorithms. In: Proceedings of the 13th International Static Analysis Symposium, 2006. 18–34

  • 22
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值