今天我在Matlab中偶然发现了这个简单的问题:
>> 1/(10^309)
ans =
0
一切都很好。现在我输入:
>> 0.0001/(10^308)
ans =
9.999999999984653e-313
并且非常困惑。在Matlab realmin=2.225073858507201e-308
中,这不是最小的数字吗?为什么上面的输出没有给出0
?
答案 0 :(得分:6)
realmin
返回IEEE双精度中最小的正规范化浮点数。
有较小的正denormal个浮点数。看看“What Every Computer Scientist Should Know About Floating-Point Arithmetic”。
您可能对eps
更感兴趣,它返回不同数字之间的最小增量。
答案 1 :(得分:5)
在help realmin
中,它说:“REALMIN最小的正标准化浮点数。”
规范化的浮点数在有效数字中没有前导零 - 所以类似于1.123 * 10 ^ -10。如果有效数具有前导零,如0.0001 * 10 ^ -10,那么它是denormal。
我认为eps(0)
给出了Matlab中可用的最小非规范数。