浮点表示是否依赖编译器在C ++中?

时间:2016-09-19 14:52:54

标签: c++ floating-point

问题出在标题中。似乎我交付给我的客户的软件具有不同的行为,这取决于一些参数作为整数或浮点数传递。我使用MinGW为我的客户构建了一个DLL,并将其集成到他的Visual Studio项目中,该项目使用了一些其他编译器(不知道哪个,我想是VS的标准版本)。

浮游物的表现方式与他不同吗?

感谢您的提升, 查尔斯

1 个答案:

答案 0 :(得分:4)

是的,浮点表示依赖于编译器。

理论上,您可以使用std::numeric_limits来确定表示的主要方面,例如它是IEEE 754,还是二进制或十进制。

实际上除了内存布局之外你不能依赖它,因为使用主编译器g ++,浮点运算的语义受到优化选项的强烈影响(例如,NaN是否比较相等对自己与否本身。)

即。实际上,它不仅依赖于编译器,还依赖于选项。

给定平台的快速编译器通常符合该平台的浮点标准内存布局,例如: Windows中的IEEE 754(标准起源于PC平台)。因此,当在g ++和Visual C ++之间交换时,浮点值通常可以正常工作。一个例外是g ++ long double映射到80位IEEE 754,而使用Visual C ++它映射到普通double,即64位,而可能可能是什么给你带来麻烦。