解
感谢@Michael Veksler的回答,我处于正确的位置以寻找解决方案。@Christoph,在这个岗位,建议尝试不同的编译器标志设置浮点运算的精度。
对我来说,-mpc32旗帜解决了这个问题。
我必须将C ++代码转换为C代码,因为新目标将没有C ++编译器。我遇到一个奇怪的事情,在C程序中运行时,与在C ++程序中运行时,数学方程式给出不同的结果。
方程:
float result = (float)(a+b-c+d+e);
Run Code Online (Sandbox Code Playgroud)
等式的元素都是浮点数。我通过检查每个元素的内存内容
printf("a : 0x%02X%02X%02X%02X\n",((unsigned char*)&a)[0],((unsigned char*)&a)[1],((unsigned char*)&a)[2],((unsigned char*)&a)[3]);
Run Code Online (Sandbox Code Playgroud)
在C和C ++中,abcd和e相等,但结果不同。
C语言中的计算示例:
a : 0x1D9969BB
b : 0x6CEDC83E
c : 0xAC89452F
d : 0xD2DC92B3
e : 0x4FE9F23C
result : 0xCD48D63E
Run Code Online (Sandbox Code Playgroud)
还有一个C ++示例:
a : 0x1D9969BB
b : 0x6CEDC83E
c : 0xAC89452F
d : 0xD2DC92B3
e : 0x4FE9F23C
result : 0xCC48D63E
Run Code Online (Sandbox Code Playgroud)
当我在更小的部分的方程分离,如在r = a + b随后r = r …