e = realmin;
x = 1 - e;
fprintf('x is %g',x);
Run Code Online (Sandbox Code Playgroud)
生产x is 1.但是,我试图设置x为1减去一个小epsilon,它等于realmin.
如何停止四舍五入?
考虑指数realmin和指数之间的差异1- 差异是关于308.这意味着Matlab需要大约308个数字(所有这9个数字除了最后一个数字),1-realmin但Matlab当然可以使用双精度浮点数本身,它只提供15或16个十进制数字.
"问题"是未能理解浮点算法的一个微妙之处.最接近的可表示的双精度数1 - realmin是1.
你想要的功能是Matlab的eps.虽然1 - eps(1)表示(带有format long集合)作为回报的1.000000000000000评估或者您愿意.这是这是一个比较混乱的表现.1 - eps(1) == 10false