matlab - 比较matlab中的2个浮点数
问题描述
在过去的几周里,我被 Matlab 中的浮点比较问题折磨着。
我的代码涉及大量a<b
or c<=d
。让我抓狂的是
dw = 0.001;
W1 = [0:dw:1];
W2 = [0:dw:1];
然后我们有
>>W1(418) = 0.417000000000000
>>W2(418) = 0.417000000000000
>>W1(418)>=W2(418)
ans =
logical
0
>>W2(418)>=W1(418)
ans =
logical
1
我目前处理这个问题的方法是定义一个错误术语eps0 = 10^(-15)
。然后,每当我期望拥有 时a<=b
,我都会这样做a<=b+eps0
。
但我想知道是否有更通用的方法来解决这个问题?对此,我真的非常感激!
解决方案
不,没有通用的方法来解决浮点数比较,每种情况都不一样,预期的舍入误差会随着情况而变化。
而不是使用eps0 = 10^(-15)
,使用eps(b)
:a<=b+eps(b)
。b+eps(b)
是可以表示的下一个较大的值(假设b
为正)。这应该注意一种形式的舍入误差。如果舍入误差累积,则需要更大的余量:a<=b+10*eps(b)
例如。
推荐阅读
- spring - 如何在嵌入式 tomcat 服务器上部署 Spring Boot Web 应用程序,来自 Spring Boot 本身
- xcode - 在 OSX Mojave 上安装虚幻引擎
- javascript - 在Angular应用程序中打开的菜单中单击时防止md-menu关闭
- python - 属性错误:“列表”对象没有属性.....
- javascript - 在数组中,如何在javascript中确保元素不重复?
- reactjs - 草图反应?
- c - 将值分配给之前初始化为 NULL 的指针
- c++ - 无法在 C++ 中执行多线程
- nginx - 没有 SSL 的 CloudFlare 中子域上的 www 配置问题
- java - 为什么方法返回列表的大小为零