一个运算符似乎在我的C代码中产生了错误的结果。 首先,这些是我的代码行,我声明变量(在main函数之外,一般范围):
FILE *fenergy;
float p1,p2,p3;
float FinalEnergy, EnergyState;
然后,我调用一个按顺序执行下一行代码的函数:
p1=FinalEnergy;
p2=EnergyState;
FinalEnergy=FinalEnergy+EnergyState;
fprintf(fenergy,"p1=%f p2=%f Final=%f",p1,p2,FinalEnergy);
文件" fenergy"使用函数正确启动:
fenergy=fopen(energy.txt,"w");
所有变量的值在前几百万个步骤中似乎是正确的,但随后,操作" +"在行:
FinalEnergy=FinalEnergy+EnergyState;
输出错误。这是fprintf函数写入的结果输出示例:
p1=-130482984.000000 p2=-23.000000 Final=-130483008.000000
p1=-130483008.000000 p2=-23.000000 Final=-130483032.000000
p1=-130483032.000000 p2=-24.000000 Final=-130483056.000000
我对这个错误的结果感到疯狂。只有一个sum运算符和三个变量,但是我的代码给出了错误的输出。 我在Windows 10(MinGW)和linux(gcc)中编译并运行了我的代码。
我真的迷失了这个问题。 任何建议都将受到高度赞赏。
答案 0 :(得分:0)
这是一个舍入误差或精度/精度问题,参见https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems(https://en.wikipedia.org/wiki/Machine_epsilon,...)
可能会尝试使用double
代替float
对于任意精度,您可以使用特殊库,如MPFR(http://www.mpfr.org/)