如何在C89中以浮点双精度定义常量

时间:2019-07-08 12:51:12

标签: c ieee-754 c89

我的代码中声明的常量在c89中无效(历史项目的编译器选项)。

#define K_MAX_KCG_REAL 0x1.FFFFFFFFFFFFFp1023

我正在寻找在c89中有效的解决方案

我尝试过

#define K_MAX_KCG_REAL 0x7FEFFFFFFFFFFFFF

,但被解释为浮点值约为2的整数。 9.22e18。 远不是我需要的1.79e308。 声明双精度最大值的余数的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您要查找的电话号码是179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.

如果在DBL_MAX中定义了<float.h>,则应该使用它。

对于许多编译器,1.7976931348623157e308就足够了。

如果编译器无法正确解析它们,则可以尝试(9007199254740991. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 1073741824. * 2048.)

答案 1 :(得分:0)

您需要创建一个包含unsigned long longdouble的并集,并初始化前者。

const union {
    unsigned long long i;
    double d;
} K_MAX_KCG_REAL = { 0x7FEFFFFFFFFFFFFF };