如何阻止Matlab舍入双打?

时间:2013-03-06 15:15:06

标签: matlab rounding

e = realmin;
x = 1 - e;

fprintf('x is %g',x);

制作x is 1。但是,我试图将x设置为1减去一个小epsilon,等于realmin

如何停止整理?

1 个答案:

答案 0 :(得分:5)

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

'问题'是一个未能理解浮点算法的微妙之处。与1 - realmin最接近的可表示的双精度数为1

你想要的功能是Matlab的eps。虽然1 - eps(1)代表format long代表1.000000000000000 1 - eps(1) == 1,但0的评价会返回false或{{1}}。这里 表示有点令人困惑。