我将0.4543543234343654632452452525254e-323分配给double变量a并打印它,尽管它小于DBL_MIN,但仍可以分配和打印它。

DBL_MAX: 1.79769e+308
FLT_MAX: 3.40282e+38
DBL_MIN: 2.22507e-308
FLT_MIN: 1.17549e-38
a: 4.94066e-324

为什么会这样?

最佳答案

实际上,DBL_MIN不是最小的值,而是可表示的最小normalized value

区别在于,前导数字对于规范化值而言为1,而对于非常规数字而言则为0。请注意,对于带有 float 处理单元的硬件,denormal numbers可能会遇到严重的性能问题,而 float 处理单元无法在硬件中管理它们。

但是您的值0.454354e-323(对应于4.545354e-324)小于用double表示的最小非正规数,实际上它已四舍五入到4.94066e-324,后者是可以存储在double中的最小实数。

10-06 06:05