【问题标题】:Incorrect float result浮动结果不正确
【发布时间】:2015-03-29 15:32:55
【问题描述】:

我有一个浮点数组中的数字列表(见下文),我必须得到总和然后计算平均值。以这段代码为例:

for(i=0; i<M; i++)
    sI_Ssum += sI_S[i];

并打印结果:

fprintf(fswaps, "Avg: %.1f", sI_Ssum/M);

我得到了这个明显错误的奇怪结果,但为什么会发生这种情况?

75157066131085846000000000000000.0

所有变量都是浮点数。

数组元素:

224230368  
224013664  
223660880  
226627536  
225013760  
224190272  
223501872  
225202688  
224685264  
225468864  
226371200  
224903232  
226204800  
224598128  
225268816  
225997904  
225491536  
224665840  
226138784  
224613424  

【问题讨论】:

  • 你确定你的数组是浮点数而不是双精度数吗? Double 需要 %g 格式说明符。
  • @1s and 0s: "Double 需要 %g 格式说明符"???不,它没有。虽然将%lfdouble 结合使用以保持一致性更好,但%f 也可以正常工作。
  • 不,我没有将变量设置为 0。让我试试吧
  • @alk 我猜 %f 没问题。我一直使用 %g 作为双打。
  • @RoastedCode:如果您忘记将总和初始化为零,为什么您如此确定那些“其他数组”可以正常工作?你真的检查过结果吗?

标签: c arrays floating-point initialization average


【解决方案1】:

我想你忘记初始化sI_Ssum了。

sI_Ssum 设置为0 -

 sI_Ssum = 0;

【讨论】:

  • 谢谢,看来我得改掉这个忘记初始化变量的习惯了。
  • 是的,初始化变量始终是一个好习惯。相反,变量初始值可能会设置为垃圾值,这会产生不确定的结果。
猜你喜欢
  • 2016-05-02
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多