realmin
“以 IEEE double 返回最小正归一化 float ”。 eps(X)
"是从 ABS(X) 到
与 X 具有相同精度的下一个更大的 float ”。
如果我正确地解释了上述文档,那么 realmin
—— 可以表示的最小正数 —— 必须小于 eps
(0)
。但是:
>> realmin; % 2.2251e-308
>> eps(0); % 4.9407e-324
显然,eps(0)
更小,也可以表示。谁能给我解释一下?
最佳答案
这是一个 float 问题。你应该去阅读 denormal numbers .
简而言之,realmin
返回最小正标准化 float 。但也可能有比这更小的非正规数,并且仍然可以用 float 表示,这就是 eps(0)
返回的结果。
非正规数的快速解释
二进制 float 如下所示:
1.abcdef * 2^M
其中 abcdefg
均为 0 或 1,M
是 -1022 <= M <= 1023 范围内的数字。这些被称为标准化 float 。可能的最小归一化 float 是 1 * 2^(-1022)
。
非正规数看起来像这样
0.abcdef * 2^(-1022)
因此它们可以取小于可能的最小归一化 float 的值。非正规数在 -realmin
和 realmin
之间线性插值。
关于matlab - 为什么 realmin > eps(0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15806537/