我们有两个嵌入式项目:一个使用cosmic编译器,另一个使用GCC。两者都遵守ISO/IEC 9899:1990规定。
当我们使用文字“14.8f”初始化一个float变量时,在cosmic编译器下它会被翻译成二进制的0x416CCCCC,而在GCC下会被翻译成0x416CCCCD。
IEC标准第6.3.1.4章节中,浮点类型第2项说明如下:
如果要转换的值在可以表示但不能准确表示的值范围内,则结果可能是以实现定义的方式选择的最近更高或最近更低的值。
由于我们将这些数字用作阈值,因此这显然会产生差异。
cosmic编译器声明使用向下取整的实现方式。由于GCC更为复杂,我想知道它是否有一个编译器标志,可以在编译时选择行为。到目前为止,我只发现您可以选择FE_DOWNWARD,但那与运行时有关,而不是编译时。
有人知道这样一个编译时转换的标志吗?
当我们使用文字“14.8f”初始化一个float变量时,在cosmic编译器下它会被翻译成二进制的0x416CCCCC,而在GCC下会被翻译成0x416CCCCD。
IEC标准第6.3.1.4章节中,浮点类型第2项说明如下:
如果要转换的值在可以表示但不能准确表示的值范围内,则结果可能是以实现定义的方式选择的最近更高或最近更低的值。
由于我们将这些数字用作阈值,因此这显然会产生差异。
cosmic编译器声明使用向下取整的实现方式。由于GCC更为复杂,我想知道它是否有一个编译器标志,可以在编译时选择行为。到目前为止,我只发现您可以选择FE_DOWNWARD,但那与运行时有关,而不是编译时。
有人知道这样一个编译时转换的标志吗?