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.  
  25. double u2 = (double)rand() / RAND_MAX;
  26.  
  27. double r = sqrt(-2.0 * log(u1));
  28. double theta = 2.0 * 3.14 * u2;
  29.  
  30. double z1 = r * cos(theta);
  31. double z2 = r * sin(theta);
  32.  
  33. z[i] = z1;
  34. if (i + 1 < N) z[i + 1] = z2;
  35. }
  36.  
  37. for (i = 0; i < N; i++)
  38. {
  39. sum += z[i];
  40. sum_sq += z[i] * z[i];
  41. }
  42.  
  43. double mean = sum / N;
  44. double variance = (sum_sq / N) - (mean * mean);
  45.  
  46. double stddev = sqrt(variance);
  47.  
  48. printf("Generated %d normal random numbers (mean=0, stddev=1)\n", N);
  49.  
  50. printf("Mean = %.6f\n", mean);
  51. printf("Std Dev = %.6f\n", stddev);
  52. free(z);
  53.  
  54. return 0;
  55.  
  56.  
  57.  
  58. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
Generated 10000 normal random numbers (mean=0, stddev=1)
Mean     = -0.008106
Std Dev  = 0.992046