为什么可以打印小于DBL_MIN的双数?

pak*_*ade 5 c++ double range ieee-754

我分配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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Jac*_*ack 12

实际上DBL_MIN不是最小值,而是可表示的最小标准化值.

差异是前导数字,标准值为1,而非标准数为0.请注意,非正规数字可能会受到硬件上的严重性能问题的困扰,浮动处理单元无法在硬件中管理它们.

但是你的值,0.454354e-323对应于4.545354e-324小于可用a表示的最小非正规数double,实际上它被四舍五入到4.94066e-324可以存储在a中的真正最小数double.