我对Matlab的精度有疑问。我在这里搜索了这些问题,并且他们提到在使用非常大或非常小的数字以及查看数字比较的其他帖子时存在精确问题。我的情况有点不同
我没有,我的数字只有4位小数,我希望它们加起来一个。 例: 初步数据:
aeb =
0.231215677537590 0.470472652172102 0.203009018534716
0.087759104877338 0.007588684370711
然后我将它四舍五入得到4位小数:
aeb = round(aeb*10000)/10000
0.231200000000000 0.470500000000000 0.203000000000000
0.087800000000000 0.007600000000000
然后我确定最大的数字并用一个
替换它[~, idx]=max(aeb);
aeb(idx)=0;
aeb(idx)= 1 - sum(aeb);
但是当我这样做的时候:
1 - sum(aeb)
1.110223024625157e-16
有谁知道如何让它们添加到一个?我只想要3-5个小数位。
答案 0 :(得分:3)
他们的总和在第一名machine epsilon之内。简短的回答是,任何小的差异都与零无法区分。
在很多计算环境中,你不想测试相等性,你想测试差异是否在一定的容差范围内。例如
abs(x - y) < tol