论述:数值计算中的精度问题

论述:数值计算中的精度问题

更新历史
20190323:

  1. 首次发布

( 1 − 10 ÷ 9 ) (1-10\div9) (110÷9)等于多少?

这个问题看上去很简单,我们可以很容易地得到:

1 − 10 ÷ 9 = 1 − 1.1 1 ˙ = − 0.1 1 ˙ 1-10\div9 = 1-1.1\dot1 = -0.1\dot1 110÷9=11.11˙=0.11˙

可以看到,理论上的结果是一个无限循环的小数。
如果我们通过Python (博主采用的Python版本为:3.7.2)去计算上述的表达式,得到的结果是:

>>> 1-10/9
-0.11111111111111116

如果我们通过Matlab (博主采用的Matlab版本为:2017b)去计算上述的表达式,得到的结果则是:

-0.111111111111111

到此为止,机智的你一定发现了:

  • 用Python和Matlab计算出来的结果,小数部分的位数都是有限的
  • 用Python和Matlab计算出来的结果,小数部分的位数不一样
  • 用Python和Matlab计算出来的结果,对于常规数值计算的需求来说,精度都是远远足够的

将上述的发现概括、总结、升华一下,那就是:

  • 高精度的计算工具计算表达式 ( 1 − 10 ÷ 9 ) (1-10\div9) (110÷9),得到的结果在精度上是有限但又满足需求的。

借此,我们可以很容易地想到:

  • 低精度的计算工具计算表达式 ( 1 − 10 ÷ 9 ) (1-10\div9) (110÷9),得到的结果在精度上是有限的,结果的精度不一定满足需求。

是的,如果使用的计算工具的精度不够高,你可能会得到:

		1-10÷9 = 0
或者: 	1-10÷9 = -0.1
或者: 	1-10÷9 = -0.11
或者: 	...

以上的结果你能接受到什么程度,取决于你的计算需求。在硬件计算的领域,例如利用FPGA做卷积计算,使用的乘法器、加法器、乘加器等存在位宽的限制,往往就需要很小心地考虑数据的计算精度。

用一句话将本论述归纳总结一下,那就是:

  • 做数值计算时,需要关注精度问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值