1
e = realmin;
x = 1 - e;

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

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

如何停止四舍五入?

4

1 回答 1

5

realmin考虑一下和的指数之间的1差异——差异大约是308. 这意味着 Matlab 将需要大约 308 位数字(可能除了最后一位之外全部为 9)来表示1-realmin,但是 Matlab 当然,本机使用仅提供 15 或 16 位十进制数字的双精度浮点数。

“问题”是未能理解浮点算术的微妙之处之一。最接近的可表示双精度数1 - realmin1

您想要的功能是 Matlab 的eps. While1 - eps(1)被表示(带有format long集合)作为回报的1.000000000000000评估,或者如果你喜欢。这里表示有点令人困惑。1 - eps(1) == 10false

于 2013-03-06T15:32:02.230 回答