5

今天我在 Matlab 中偶然发现了这个简单的问题:

>> 1/(10^309)

ans =

     0

一切都很好。现在我输入:

>> 0.0001/(10^308)

ans =

    9.999999999984653e-313

并变得非常困惑。在 Matlab 中不是最小的数字realmin=2.225073858507201e-308吗?为什么上面的输出没有给出0

4

2 回答 2

6

realmin返回 IEEE 双精度的最小正归一化浮点数。

有更小的正非正规浮点数。看看“<a href="http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf" rel="noreferrer">每个计算机科学家应该知道的关于浮点运算的知识” .

您可能对eps返回不同数字之间的最小增量更感兴趣。

于 2012-04-21T18:35:44.723 回答
5

help realmin中,它说:“REALMIN 最小正归一化浮点数。”

归一化的浮点数在有效数字中没有前导零 - 所以类似于 1.123 * 10^-10。如果有效数字有前导零,例如 0.0001 * 10^-10,则它是非正规的。

我认为eps(0)给出了 Matlab 中可用的最小非正规数。

于 2012-04-21T18:38:11.637 回答