我需要计算一组非常大的 double 的平均值(10^9 个值)。值的总和超过了 double 的上限,那么有谁知道计算平均值的任何巧妙的小技巧,而不需要计算总和?
我使用的是 Java 1.5。
最佳答案
您可以calculate the mean iteratively .该算法简单、快速,每个值只需处理一次,变量永远不会大于集合中的最大值,因此不会溢出。
double mean(double[] ary) {
double avg = 0;
int t = 1;
for (double x : ary) {
avg += (x - avg) / t;
++t;
}
return avg;
}
在循环内 avg
始终是迄今为止处理的所有值的平均值。换句话说,如果所有的值都是有限的,你就不应该出现溢出。
关于java - 什么是计算所有值的总和超过 double 限制的平均值的好解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930454/