fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main() {
  5. int imax = 28, n = 3;
  6. double pi, err, an, bn;
  7. const double PI = 3.141592653589793238;
  8.  
  9. // 初期値の設定(正三角形)
  10. an = n * sin(PI / n); // 内接
  11. bn = n * tan(PI / n); // 外接
  12. pi = (an + bn) / 2.0;
  13. err = fabs(pi - PI) / PI;
  14.  
  15. printf("n = %d, pi ≒ %.18lf, 相対誤差 = %.18lf\n", n, pi, err);
  16.  
  17. for (int i = 0; i < imax; i++) {
  18. n *= 2;
  19.  
  20. // 新しい角度
  21. double theta = PI / n;
  22.  
  23. // 内接・外接多角形の周の長さを再計算
  24. an = n * sin(theta);
  25. bn = n * tan(theta);
  26.  
  27. pi = (an + bn) / 2.0;
  28. err = fabs(pi - PI) / PI;
  29.  
  30. printf("n = %d, pi ≒ %.18lf, 相対誤差 = %.18lf\n", n, pi, err);
  31. }
  32.  
  33. return 0;
  34. }
  35.  
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
n = 3, pi ≒ 3.897114317029973130, 相対誤差 = 0.240490014699031918
n = 6, pi ≒ 3.232050807568876749, 相対誤差 = 0.028793724697477922
n = 12, pi ≒ 3.160609425201860390, 相対誤差 = 0.006053226407420276
n = 24, pi ≒ 3.146144277689368884, 相対誤差 = 0.001448826949087361
n = 48, pi ≒ 3.142718209089150783, 相対誤差 = 0.000358275442894079
n = 96, pi ≒ 3.141873275267938581, 相対誤差 = 0.000089324654431187
n = 192, pi ≒ 3.141662761132642423, 相対誤差 = 0.000022315923984988
n = 384, pi ≒ 3.141610177484352562, 相対誤差 = 0.000005578028882714
n = 768, pi ≒ 3.141597034376503395, 相対誤差 = 0.000001394447719144
n = 1536, pi ≒ 3.141593748774787365, 相対誤差 = 0.000000348608210869
n = 3072, pi ≒ 3.141592927385311818, 相対誤差 = 0.000000087151820396
n = 6144, pi ≒ 3.141592722038626828, 相対誤差 = 0.000000021787940468
n = 12288, pi ≒ 3.141592670701998546, 相対誤差 = 0.000000005446984163
n = 24576, pi ≒ 3.141592657867844363, 相対誤差 = 0.000000001361746005
n = 49152, pi ≒ 3.141592654659305595, 相対誤差 = 0.000000000340436395
n = 98304, pi ≒ 3.141592653857171236, 相対誤差 = 0.000000000085109099
n = 196608, pi ≒ 3.141592653656637424, 相対誤差 = 0.000000000021277204
n = 393216, pi ≒ 3.141592653606503749, 相対誤差 = 0.000000000005319160
n = 786432, pi ≒ 3.141592653593971107, 相対誤差 = 0.000000000001329896
n = 1572864, pi ≒ 3.141592653590837614, 相対誤差 = 0.000000000000332474
n = 3145728, pi ≒ 3.141592653590054240, 相対誤差 = 0.000000000000083118
n = 6291456, pi ≒ 3.141592653589858397, 相対誤差 = 0.000000000000020780
n = 12582912, pi ≒ 3.141592653589809103, 相対誤差 = 0.000000000000005089
n = 25165824, pi ≒ 3.141592653589797113, 相対誤差 = 0.000000000000001272
n = 50331648, pi ≒ 3.141592653589794004, 相対誤差 = 0.000000000000000283
n = 100663296, pi ≒ 3.141592653589793116, 相対誤差 = 0.000000000000000000
n = 201326592, pi ≒ 3.141592653589793116, 相対誤差 = 0.000000000000000000
n = 402653184, pi ≒ 3.141592653589793116, 相対誤差 = 0.000000000000000000
n = 805306368, pi ≒ 3.141592653589793116, 相対誤差 = 0.000000000000000000