我正在尝试计算给定数字集的平均值和方差的平均值。平均值似乎运行良好,但是我无法计算方差,结果始终为0。我很确定我对变量类型有些困惑:
int numRuns = 5;
ArrayList<Long> numbersOfIOs = new ArrayList<Long>();
.
.
.
long averageNumberOfIOs = 0;
for(Long io : numbersOfIOs){
averageNumberOfIOs+=io;
}
System.out.println("Average number of I/Os: "
+ (averageNumberOfIOs/numRuns)
+ " I/Os");
long varianceNumberOfIOs = 0;
for(Long io : numbersOfIOs){
double temp = Math.pow(2.0,(double)(io-averageNumberOfIOs));
varianceNumberOfIOs+=Math.round(Math.pow(2,(io-averageNumberOfIOs)));
}
System.out.println("Variance: " + (varianceNumberOfIOs/numRuns) + " I/Os\n");
我将temp放置在那里只是出于调试目的,我发现它始终为0。
任何帮助将不胜感激
您的代码中有两个问题。
第一的。该变量averageNumberOfIOs
包含IO的总和,而不是平均值。第二。要计算变量的平方x
,请使用Math.pow(x, 2.0)
,而不要Math.pow(2.0, x)
像在代码中那样使用。
解决以上两个问题后,您将获得正确的结果。
您得到0的原因是这样的。由于averageNumberOfIOs
包含IO的总和,因此表达式(io-averageNumberOfIOs)
是一个负数(可能是很大的负数),而与的值无关io
。计算Math.pow(2.0, (io-averageNumberOfIOs))
意味着您要计算2到大负数的幂,这将产生一个非常接近0的值。将这些总和乘以IO,您仍然会得到0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句