【发布时间】: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 格式说明符"???不,它没有。虽然将
%lf与double结合使用以保持一致性更好,但%f也可以正常工作。 -
不,我没有将变量设置为 0。让我试试吧
-
@alk 我猜 %f 没问题。我一直使用 %g 作为双打。
-
@RoastedCode:如果您忘记将总和初始化为零,为什么您如此确定那些“其他数组”可以正常工作?你真的检查过结果吗?
标签: c arrays floating-point initialization average