This question already has answers here:
'float' vs. 'double' precision
(6个答案)
2年前关闭。
一个操作员似乎在我的C代码中产生了错误的结果。
首先,这些是我在代码中声明变量的行(在main函数之外,一般范围):
然后,我调用一个函数,该函数按顺序执行下一行代码:
使用功能可以正确启动文件“ fenergy”:
在前一百万步中,所有变量的值似乎都是正确的,但随后该行中的“ +”运算符:
输出错误。这是fprintf函数编写的文件输出的结果的示例:
我为这个错误的结果而疯狂。只有一个求和运算符和三个变量,但是我的代码给出了错误的输出。
我已经在Windows 10(MinGW)和linux(gcc)中编译并运行了我的代码。
我真的对这个问题迷失了。
任何建议将不胜感激。
(6个答案)
2年前关闭。
一个操作员似乎在我的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
我为这个错误的结果而疯狂。只有一个求和运算符和三个变量,但是我的代码给出了错误的输出。
我已经在Windows 10(MinGW)和linux(gcc)中编译并运行了我的代码。
我真的对这个问题迷失了。
任何建议将不胜感激。
最佳答案
这是舍入误差或精度/精度问题,请参见。 https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems(https://en.wikipedia.org/wiki/Machine_epsilon,...)
也许尝试使用double
代替float
对于任意精度,您可以使用特殊的库,例如MPFR(http://www.mpfr.org/)
关于c - C代码中的错误总和结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48141351/
10-17 01:27