fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define M_PI 3.14159265
  6.  
  7. int main() {
  8. double a, b, s, shinchi;
  9. int count, m, n;
  10.  
  11. // 真の値(4つの単位円で囲まれた領域)
  12. shinchi = M_PI - 2.0;
  13.  
  14. count = 0;
  15.  
  16. // nの範囲で乱数の試行回数を増やす
  17. for (n = 10; n < 100000; n = n * 5) {
  18. count = 0;
  19. s = 0.0;
  20.  
  21. for (m = 0; m < n; m++) {
  22. // ランダムな点 (a, b) を生成
  23. a = (double)rand() / RAND_MAX;
  24. b = (double)rand() / RAND_MAX;
  25.  
  26. // 4つの円に含まれるかチェック
  27. if ((a * a + b * b <= 1.0) && // (0, 0) を中心とする円
  28. ((a - 1) * (a - 1) + b * b <= 1.0) && // (1, 0) を中心とする円
  29. (a * a + (b - 1) * (b - 1) <= 1.0) && // (0, 1) を中心とする円
  30. ((a - 1) * (a - 1) + (b - 1) * (b - 1) <= 1.0)) { // (1, 1) を中心とする円
  31. s += 1.0;
  32. }
  33. count++;
  34. }
  35.  
  36. // 面積の推定値
  37. s /= count;
  38.  
  39. // 誤差の出力
  40. printf("%d\t%f\n", n, fabs(s - shinchi));
  41. }
  42.  
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
10	0.741593
50	0.841593
250	0.785593
1250	0.834393
6250	0.814393
31250	0.828409