繁体   English   中英

我可以计算这些数字的平均值吗?

[英]Can I calculate the average of these numbers?

我想知道是否有可能计算一些数字的平均值:

int currentCount = 12;
float currentScore = 6.1123   (this is a range of 1 <-> 10).

现在,如果我收到另一个分数(比如4.5),我可以重新计算平均值了吗?

int currentCount now equals 13
float currentScore now equals ?????

还是这不可能,我仍然需要记住分数列表?

通过以下公式,您可以根据需要从存储的平均值和计数中跟踪平均值。

currentScore = (currentScore * currentCount + newValue) / (currentCount + 1)
currentCount = currentCount + 1

这取决于您的平均值是当前的总和除以计数的事实。 因此,您只需将计数除以平均值即可得到总和,将新值相加并除以(count + 1),然后增加计数。

因此,假设您有数据{7,9,11,1,12} ,而唯一要保留的是平均值和计数。 随着每个数字的添加,您将获得:

+--------+-------+----------------------+----------------------+
| Number | Count |   Actual average     | Calculated average   |
+--------+-------+----------------------+----------------------+
|      7 |     1 | (7)/1           =  7 | (0 * 0 +  7) / 1 = 7 |
|      9 |     2 | (7+9)/2         =  8 | (7 * 1 +  9) / 2 = 8 |
|     11 |     3 | (7+9+11)/3      =  9 | (8 * 2 + 11) / 3 = 9 |
|      1 |     4 | (7+9+11+1)/4    =  7 | (9 * 3 +  1) / 4 = 7 |
|     12 |     5 | (7+9+11+1+12)/5 =  8 | (7 * 4 + 12) / 5 = 8 |
+--------+-------+----------------------+----------------------+

我喜欢存储总和和计数。 每次避免额外的乘法。

current_sum += input;
current_count++;
current_average = current_sum/current_count;

当您查看平均值的公式时,这真的很容易,即: A1 + A2 + ... + AN/N 现在,如果您拥有旧的平均值和N(数字计数),则可以轻松计算出新的平均值:

newScore = (currentScore * currentCount + someNewValue)/(currentCount + 1)

您可以存储currentCount和sumScore并计算sumScore / currentCount。

或者...如果您想变得愚蠢,可以在一行中完成:

 current_average = (current_sum = current_sum + newValue) / ++current_count;

:)

float currentScore现在等于(currentScore *(currentCount-1)+ 4.5)/ currentCount?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM