什么是完整版号:1.7976931348623158E+308?

What is the full version of the number: 1.7976931348623158E+308?

我一直在网上搜索,发现 1.7976931348623158E+308 是最高的浮点值。可以给我完整版吗?

我不太清楚您所说的“完整版”是什么意思,但假设 IEEE-754 格式,最大双精度值的表示方式如下:

 VALUE = 1.7976931348623157e308 :: Double
                  6    5          4         3         2         1         0
                  3 21098765432 1098765432109876543210987654321098765432109876543210
                  S ----E11---- ------------------------S52-------------------------
   Binary layout: 0 11111111110 1111111111111111111111111111111111111111111111111111
      Hex layout: 7FEF FFFF FFFF FFFF
       Precision: Double
            Sign: Positive
        Exponent: 1023 (Stored: 2046, Bias: 1023)
  Classification: FP_NORMAL
          Binary: 0b1.1111111111111111111111111111111111111111111111111111p+1023
           Octal: 0o1.777777777777777774p+1023
         Decimal: 1.7976931348623157e308
             Hex: 0xF.FFFFFFFFFFFF8p+1020

常见的DBL_MAX的近似值是

printf("%.*e\n", DBL_DECIMAL_DIG-1, DBL_MAX);
// 1.7976931348623157e+308 

通常,DBL_DECIMAL_DIG(例如 17)位有效的小数位就足够了。

普通DBL_MAXexactly value 是 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0


要在十六进制有效/十进制基数 2 指数中找到精确值,请使用

printf("%a\n", DBL_MAX);
// 0x1.fffffffffffffp+1023

如果你想要更短的形式,IEEE754 max (finite) double 是 2^1024 - 2^(1024-53)

使用任何大整数算术包来打印它。