e = realmin;
x = 1 - e;
fprintf('x is %g',x);
制作x is 1
。但是,我试图将x
设置为1减去一个小epsilon,等于realmin
。
如何停止整理?
答案 0 :(得分:5)
考虑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) == 1
,但0
的评价会返回false
或{{1}}。这里 表示有点令人困惑。