我将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
中的最小实数。