概述
论述:数值计算中的精度问题
更新历史
20190323:
- 首次发布
( 1 − 10 ÷ 9 ) (1-10div9) (1−10÷9)等于多少?
这个问题看上去很简单,我们可以很容易地得到:
1 − 10 ÷ 9 = 1 − 1.1 1 ˙ = − 0.1 1 ˙ 1-10div9 = 1-1.1dot1 = -0.1dot1 1−10÷9=1−1.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-10div9) (1−10÷9),得到的结果在精度上是有限但又满足需求的。
借此,我们可以很容易地想到:
- 用低精度的计算工具计算表达式 ( 1 − 10 ÷ 9 ) (1-10div9) (1−10÷9),得到的结果在精度上是有限的,结果的精度不一定满足需求。
是的,如果使用的计算工具的精度不够高,你可能会得到:
1-10÷9 = 0
或者: 1-10÷9 = -0.1
或者: 1-10÷9 = -0.11
或者: ...
以上的结果你能接受到什么程度,取决于你的计算需求。在硬件计算的领域,例如利用FPGA做卷积计算,使用的乘法器、加法器、乘加器等存在位宽的限制,往往就需要很小心地考虑数据的计算精度。
用一句话将本论述归纳总结一下,那就是:
- 做数值计算时,需要关注精度问题
最后
以上就是想人陪冰淇淋为你收集整理的论述:数值计算中的精度问题论述:数值计算中的精度问题的全部内容,希望文章能够帮你解决论述:数值计算中的精度问题论述:数值计算中的精度问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复