fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. int main()
  7. {
  8. int N = 10000,i;
  9. double *z, sum = 0.0, sum_sq = 0.0;
  10.  
  11.  
  12.  
  13. z = (double *)malloc(N * sizeof(double));
  14. if (z == NULL)
  15. {
  16. printf("Memory allocation failed!\n");
  17. return 1;
  18. }
  19.  
  20. srand(time(NULL));
  21.  
  22. for (i = 0; i < N; i += 2) {
  23. double u1 = (double)rand() / RAND_MAX;
  24. double u2 = (double)rand() / RAND_MAX;
  25.  
  26. double r = sqrt(-2.0 * log(u1));
  27. double theta = 2.0 * 3.14 * u2;
  28.  
  29. double z1 = r * cos(theta);
  30. double z2 = r * sin(theta);
  31.  
  32. z[i] = z1;
  33. if (i + 1 < N) z[i + 1] = z2;
  34. }
  35.  
  36. for (i = 0; i < N; i++)
  37. {
  38. sum += z[i];
  39. sum_sq += z[i] * z[i];
  40. }
  41.  
  42. double mean = sum / N;
  43. double variance = (sum_sq / N) - (mean * mean);
  44. double stddev = sqrt(variance);
  45.  
  46. printf("Generated %d normal random numbers (mean=0, stddev=1)\n", N);
  47. printf("Mean = %.6f\n", mean);
  48. printf("Std Dev = %.6f\n", stddev);
  49. free(z);
  50.  
  51. return 0;
  52. }
Success #stdin #stdout 0.01s 5324KB
stdin
Standard input is empty
stdout
Generated 10000 normal random numbers (mean=0, stddev=1)
Mean     = 0.003228
Std Dev  = 0.999080