[英]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.