Matlab精度
Matlab precision
我对 Matlab 的精度有疑问。我在这里搜索了问题,他们提到使用非常大或非常小的数字和其他查看数字比较的帖子时存在精度问题。我的情况有点不同
我没有,我的数字只有 4 位小数,我希望它们加起来为 1。
例子:
初始数据:
aeb =
0.231215677537590 0.470472652172102 0.203009018534716
0.087759104877338 0.007588684370711
然后我四舍五入得到小数点后四位:
aeb = round(aeb*10000)/10000
0.231200000000000 0.470500000000000 0.203000000000000
0.087800000000000 0.007600000000000
然后我找出最大的数,用与1的差值代替
[~, idx]=max(aeb);
aeb(idx)=0;
aeb(idx)= 1 - sum(aeb);
但是当我这样做时:
1 - sum(aeb)
1.110223024625157e-16
有谁知道我怎样才能把它们加起来?我只想要 3-5 位小数。
他们的总和在第一名的 machine epsilon 以内。简短的回答是,任何微小的差异都无法与零区分开来。
实际需要注意的一点....
在很多计算上下文中,您不想测试相等性,而是想测试差异是否在某个公差范围内。例如
abs(x - y) < tol
我对 Matlab 的精度有疑问。我在这里搜索了问题,他们提到使用非常大或非常小的数字和其他查看数字比较的帖子时存在精度问题。我的情况有点不同
我没有,我的数字只有 4 位小数,我希望它们加起来为 1。 例子: 初始数据:
aeb =
0.231215677537590 0.470472652172102 0.203009018534716
0.087759104877338 0.007588684370711
然后我四舍五入得到小数点后四位:
aeb = round(aeb*10000)/10000
0.231200000000000 0.470500000000000 0.203000000000000
0.087800000000000 0.007600000000000
然后我找出最大的数,用与1的差值代替
[~, idx]=max(aeb);
aeb(idx)=0;
aeb(idx)= 1 - sum(aeb);
但是当我这样做时:
1 - sum(aeb)
1.110223024625157e-16
有谁知道我怎样才能把它们加起来?我只想要 3-5 位小数。
他们的总和在第一名的 machine epsilon 以内。简短的回答是,任何微小的差异都无法与零区分开来。
实际需要注意的一点....
在很多计算上下文中,您不想测试相等性,而是想测试差异是否在某个公差范围内。例如
abs(x - y) < tol