如何阻止Matlab舍入双打?

Leg*_*dre 1 matlab rounding

e = realmin;
x = 1 - e;

fprintf('x is %g',x);
Run Code Online (Sandbox Code Playgroud)

生产x is 1.但是,我试图设置x为1减去一个小epsilon,它等于realmin.

如何停止四舍五入?

Hig*_*ark 5

考虑指数realmin和指数之间的差异1- 差异是关于308.这意味着Matlab需要大约308个数字(所有这9个数字除了最后一个数字),1-realmin但Matlab当然可以使用双精度浮点数本身,它只提供15或16个十进制数字.

"问题"是未能理解浮点算法的一个微妙之处.最接近的可表示的双精度数1 - realmin1.

你想要的功能是Matlab的eps.虽然1 - eps(1)表示(带有format long集合)作为回报的1.000000000000000评估或者您愿意.这这是一个比较混乱的表现.1 - eps(1) == 10false