realmin
“返回 IEEE 双精度的最小正归一化浮点数”。eps(X)
“是从 ABS(X) 到与 X 精度相同的下一个较大的幅度浮点数的正距离”。
如果我正确解释了上述文档,那么realmin
- 可以表示的最小正数 - 必须小于eps
(0)
. 但:
>> realmin; % 2.2251e-308
>> eps(0); % 4.9407e-324
显然,eps(0)
更小的 也可以表示。有人可以向我解释一下吗?
这是一个浮点问题。你应该去阅读非正规数。
简而言之,realmin
返回最小的正归一化浮点数。但是有可能有比这更小的非正规数并且仍然可以用浮点数表示,这就是eps(0)
返回的结果。
非正规数的快速解释
二进制浮点数如下所示:
1.abcdef * 2^M
其中abcdefg
是 0 或 1,并且M
是 -1022 <= M <= 1023 范围内的数字。这些被称为归一化浮点数。最小可能的归一化浮点数是1 * 2^(-1022)
。
非正规数看起来像这样
0.abcdef * 2^(-1022)
因此它们可以采用小于可能的最小归一化浮点数的值。-realmin
非正规数在和之间线性插值realmin
。
也许这是一个定义问题,这是我在 eps 的文档中看到的:
For all X of class double such that abs(X) <= realmin, eps(X) = 2^(-1074)