c++ - 使用数组生成随机数

标签 c++

我正在尝试生成 N 个介于 0 和 1 之间的随机 float ,其中 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.


最佳答案

您在循环内计算的均值 是一个“运行均值”,即对于每个新输入的数字,您都计算到目前为止的均值。但是,对于方差,您的论坛不正确。这:

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

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

请注意,单次传递方差算法在数值上不如使用两次循环稳定,因此如果您能负担得起内存和性能方面的费用,您应该更喜欢使用两次传递的算法。

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

关于c++ - 使用数组生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58434294/

相关文章:

c++ - 如何以低于相机每秒帧数的能力处理数据?

c++ - C++中如何剪切和粘贴文件

c++ - 使用 GStreamer 和 multiudpsink 设置不同的 RTP SSRC

c++ - 二进制搜索 C++

c++ - Direct3D 和 iPhone 加速度计矩阵

c++ - C++中的指针。什么类型的对象

c++ - 您的计算机缺少 tbb.dll

c++ - Boost 1.51.0 和 Code::Blocks

c++ - 不能使用 CV_32UC1

c++ - 为什么在 64 位机器上的 C++ 中 int 的大小不是 8 个字节。还有 gcc 的任何版本都支持 8 字节 int 吗?