C代码

时间:2018-01-07 20:46:01

标签: c

一个运算符似乎在我的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)中编译并运行了我的代码。

我真的迷失了这个问题。 任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

这是一个舍入误差或精度/精度问题,参见https://en.wikipedia.org/wiki/Floating_point#Accuracy_problemshttps://en.wikipedia.org/wiki/Machine_epsilon,...)

可能会尝试使用double代替float

对于任意精度,您可以使用特殊库,如MPFR(http://www.mpfr.org/

相关问题