e = realmin;
x = 1 - e;
fprintf('x is %g',x);
产生x is 1
. 但是,我试图设置x
为 1 减去一个小 epsilon,它等于realmin
.
如何停止四舍五入?
realmin
考虑一下和的指数之间的1
差异——差异大约是308
. 这意味着 Matlab 将需要大约 308 位数字(可能除了最后一位之外全部为 9)来表示1-realmin
,但是 Matlab 当然,本机使用仅提供 15 或 16 位十进制数字的双精度浮点数。
“问题”是未能理解浮点算术的微妙之处之一。最接近的可表示双精度数1 - realmin
是1
。
您想要的功能是 Matlab 的eps
. While1 - eps(1)
被表示(带有format long
集合)作为回报的1.000000000000000
评估,或者如果你喜欢。这里的表示有点令人困惑。1 - eps(1) == 1
0
false