问题出在标题中。似乎我交付给我的客户的软件具有不同的行为,这取决于一些参数作为整数或浮点数传递。我使用MinGW为我的客户构建了一个DLL,并将其集成到他的Visual Studio项目中,该项目使用了一些其他编译器(不知道哪个,我想是VS的标准版本)。
浮游物的表现方式与他不同吗?
感谢您的提升, 查尔斯
答案 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位,而可能可能是什么给你带来麻烦。