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

如何在c89中定义浮点双精度常量,c,ieee-754,c89,C,Ieee 754,C89,我在c89(历史项目上的编译器选项)中声明了一个常量,但该表达式在c89中无效 我正在寻找在c89中有效的解决方案 我试过了 #define K_MAX_KCG_REAL 0x7FEFFFFFFFFFFFFF 但被解释为浮点值约为9.22e18的整数。 远不是我需要的1.79e308。 为双精度声明具有最大值的常数的最佳方法是什么?您需要创建一个包含无符号长和双的并集,并初始化前者 const union { unsigned long long i; double d; }

我在c89(历史项目上的编译器选项)中声明了一个常量,但该表达式在c89中无效

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

我试过了

#define K_MAX_KCG_REAL 0x7FEFFFFFFFFFFFFF
但被解释为浮点值约为9.22e18的整数。 远不是我需要的1.79e308。
为双精度声明具有最大值的常数的最佳方法是什么?

您需要创建一个包含
无符号长
的并集,并初始化前者

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

你要找的号码是
17976931348623157081452742731704356798070567525844499659891748031572607800285387605858632766878171540458953514382464234321326889464182276846754670353751698604991057655128207624549003893289440758585845513394245839032229818085593321233487878782620474747287381771809199882500261848368。

如果在
中定义了
DBL\u MAX
,您应该使用它

对于许多编译器,
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.)

使用类型双关,可能是通过一个并集或字节缓冲区?或者为什么不将它转换为它所表示的实际值?中定义了一个宏DBL_MAX:基本上最好的方法是放弃编译器。或者放弃该作业。也许甚至是相反的顺序!C99只有20年历史!感谢链接,但这是cri对于嵌入式代码,我不能添加外部头文件。不过,在c89/c90中,
unsigned long
将是一种非标准的扩展类型。我不认为,
unsigned long
是c89的标准类型。它在下面被称为扩展。
const union {
    unsigned long long i;
    double d;
} K_MAX_KCG_REAL = { 0x7FEFFFFFFFFFFFFF };