使用数组生成随机数

问题描述 投票:0回答:2

我正在尝试在0和1之间生成N个随机浮点数,其中N由用户指定。然后,我需要找到生成数字的均值和方差。努力寻找方差。

已经尝试使用变量而不是数组,但是已经更改了我的代码以允许使用数组。

#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;


int main(){
  int N, i;
  float random_numbers[i], sum, mean, variance, r;
  cout << "Enter an N value" << endl;
  cin >> N;
  sum = 0;
  variance = 0;

  for (i = 0; i < N; i++) {
    srand(i + 1);
    random_numbers[i] = ((float) rand() / float(RAND_MAX));
    sum += random_numbers[i];
    cout << random_numbers[i] << endl;
    mean= sum / N;
    variance += pow(random_numbers[i]-mean,2);

    }
  variance = variance / N;
  cout << " The sum of random numbers is " << sum << endl;
  cout << " The mean is " << mean << endl;
  cout << " The variance is " << variance << endl;

} 

The mean and sum is currently correct however the variance is not.


c++
2个回答
0
投票

您在方差计算中使用的平均值仅是第一个to i元素的平均值。您应该先计算样本的平均值,然后再做一次循环来计算方差。

享受


0
投票

您在循环内计算的mean是“运行均值”,即,对于每个新的传入数字,您要计算到此刻的均值。对于差异,但是您的forumla不正确。这个:

variance += pow(random_numbers[i]-mean,2);

如果mean是最终值,将是正确的,但由于它是运行平均值,因此方差的结果不正确。您基本上有两个选择。您可以使用正确的公式(搜索“方差单遍算法”或“运行方差”),或者先计算均值,然后设置第二个循环来计算方差(在这种情况下,您的公式是正确的。)

请注意,单次方差算法在数值上不如使用两次循环稳定,因此,如果您有足够的内存和性能,则应首选两次通过算法。

PS:您的代码还有其他问题,但我主要关注您的主要问题。

© www.soinside.com 2019 - 2024. All rights reserved.