Solution


#include<iostream>
#include<cstdlib>
#include<cmath>
#include<sys/time.h>

int main(int argc, char** argv) {
  using namespace std;

  // read sample size from command line
  if (argc < 2) {
    cerr << "meanvariance: sample size needed on command line" << endl;
    return 1;
  }
  int sampleSize = atoi(argv[1]);
  if (sampleSize <= 0) {
    cerr << "meanvariance: sample size must be strictly positive" << endl;
    return 2;
  }

  // initialize randomizer
  struct timeval theTV;
  struct timezone theTZ;
  gettimeofday(&theTV, &theTZ);
  srandom(theTV.tv_usec);

  // generate the sample (numbers between 0 and 1)
  double* sample = new double[sampleSize];
  for(int i = 0; i < sampleSize; i++) {
    sample[i] = (double) random() / (double) RAND_MAX;
  }

  // compute the mean
  double mean = 0;
  for(int i = 0; i < sampleSize; i++) {
    mean += sample[i];
  }
  mean /= (double) sampleSize;
  
  // compute the variance
  double variance = 0;
  double dtmp = 0;
  for(int i = 0; i < sampleSize; i++) {
    dtmp = sample[i] - mean;
    dtmp *= dtmp;
    variance += dtmp;
  }
  variance /= (double) sampleSize;
  
  // compute the standard deviation
  double stddev = sqrt(variance);

  // output
  cout << "mean = " << mean << "; variance = " << variance 
       << "; std deviation = " << stddev << endl;

  delete [] sample;
  return 0;
}

Let $ x=(x_1,\ldots,x_N)$ a sample of size $ N$ of values of the random variable $ X$ .

Var$\displaystyle (X)$ $\displaystyle =$ $\displaystyle \int_0^1 x^2 - \frac{1}{4} = \frac{1}{12}$  



Leo Liberti 2008-01-12