我有一个程序在文件中显示一个随机数。
#include <iostream>
#include <fstream>
#include <random>
using namespace std;
int main() {
std::ofstream file("file.txt",std::ios_base::app);
int var = rand() % 100 + 1;
file<<var ;
return 0;
}
4次试验后的结果:
1,2 2,20 3,40 1,88
我希望不显示数字。但每次尝试后只有更新的平均值。 有没有办法逐步计算平均值?
文件内部应该只存在平均值:
例如初审:
1.2
第二次试用显示文件中的平均值(1.2 + 2.2)/ 2
1.7
答案 0 :(得分:0)
您可以使用一些简单的数学来逐步计算平均值。但是,您必须计算平均值的贡献值。
假设您有 n 个数字,其平均值为 m 。您的下一个数字 x 通过以下方式对平均值做出贡献:
m =(mn + x)/(n + 1)
答案 1 :(得分:0)
划分然后乘以平均值对性能不利。我建议你存储金额和数字。
(pseudocode)
// these variables are stored between function calls
int sum
int n
function float getNextRandomAverage() {
int rnd = getOneRandom()
n++;
sum += rnd;
float avg = sum/n
return avg
}
function writeNextRandomAverage() {
writeToFile(getNextRandomAverage())
}
我觉得你的方法关闭文件似乎很奇怪。怎么知道它应该关闭呢?如果文件稍后应该使用怎么办? (比如,连续使用这种方法)。
答案 2 :(得分:0)
即使它有点奇怪,你想要做什么,而且我确定有更好的方法,这里有你如何做到这一点:
float onTheFlyAverage()
{
static int nCount=0;
float avg, newAvg;
int newNumber = getRandomNum();
nCount++; //increment the total number count
avg = readLastAvgFromFile(); //this will read the last average in your file
newAvg = avg*(nCount-1)/nCount+ (float)(newNumber)/nCount;
return newAvg;
}
如果出于某种原因,您希望将平均值保存在您提供给程序的文件中并期望它为您保留平均数(一种停止和继续功能),则必须保存/加载文件中的总数和平均值。
但是,如果你一次性去做这应该工作。恕我直言,这远非最好的方式 - 但你有它:)
注意:有一个除以0的角落 - 我没有照顾;我把它留给你。