Matlab常见问题之 浮点数精度问题
2016-11-25 16:10
507 查看
问题描述
在使用Matlab的时候,很多初学者都有一个困惑,比如下面这个例子:>> x = -1 : 0.2 : 1 x = -1.0000 -0.8000 -0.6000 -0.4000 -0.2000 0 0.2000 0.4000 0.6000 0.8000 1.0000
这里得到 11 个值的序列。
但是
>> delta = 5 - 4.8; >> x = -1 : delta : 1 x = -1.0000 -0.8000 -0.6000 -0.4000 -0.2000 0.0000 0.2000 0.4000 0.6000 0.8000
看似没有什么区别的计算为什么只能得到10个值的序列,最后一个值不见了呢?
我们再看看delta是否真的是等于0.2
>> delta == 0.2 ans = 0
居然不相等?!
让我们把数据显示得更多一点再来看看:
>> format longe >> delta delta = 2.000000000000002e-01
意外吗?
这个值并不等于0.2,这是因为计算机在浮点运算时,误差总是存在的,虽然这个误差很小,在简单运算时可以忽略不计,但是在累积运算时就会产生明显的问题。
那么我们如何避免此类问题的发生呢?
其实也很简单,因为计算机因浮点精度产生的误差并不会很大,所以通过一个roundn函数就可以将尾部的误差去除。
>> delta = 5 - 4.8; delta = roundn(delta,-2); x=-1:delta:1 x = -1.0000 -0.8000 -0.6000 -0.4000 -0.2000 0 0.2000 0.4000 0.6000 0.8000 1.0000
另外,我们如何能使delta == 0.2 成立?使用roundn进行截断是一种办法,但是截断的数位必须在你的误差允许范围之外。
理想的判断方法是使用eps
即将判断是否相等的表达式写为判断差与eps的大小关系
abs(delta - 0.2) < eps
相关文章推荐
- matlab常见问题解决方案
- matlab中的显示精度问题
- Jacket for Matlab常见问题
- [Matlab]ECG信号处理常见问题
- java浮点运算精度问题的解决
- <2011 11 7> 编程中数据处理的问题(二)浮点数运算与精度误差
- 1004. 超高精度浮点数的输出问题
- <2011 11 7> 编程中数据处理的问题(一)浮点数与精度理解
- Matlab常见问题集锦(不断更新)
- 也谈浮点精度问题:找回丢失的精度
- javascript(js)浮点数字精度问题的一个解决办法。
- java float double精度为什么会丢失?浅谈java的浮点数精度问题
- fmt标签浮点数精度设置问题
- JAVA里浮点数从字符串解析丢失精度问题
- JAVA的浮点运算精度问题的解决
- VC与Matlab联合编程常见问题集合
- (转)Direct3D的浮点精度问题
- <2011 11 10> 编程中数据处理的问题(三)浮点数运算与精度误差
- Matlab------------num2str损失精度问题
- PHP浮点精度问题