![]() |
math/03 のバックアップ(No.14) |
円周と直径の比。もしくは、直径が1の円の円周。 3.1415926535 8979323846 2643383279 5028841971 6939937510 ...
A(0.4, 0.3) B(0.5, 0.3) D(0.4, 0.2) C(0.5, 0.2)
#include <stdio.h> #define N 10 int main() { int i, j, k, c[5]; double x0, y0, x1, y1; for (k = 0; k < 5; k++) c[k] = 0; for (j = 0; j < N; j++) { y0 = (double) j / N; y1 = (double) (j + 1) / N; for (i = 0; i < N; i++) { x0 = (double) i / N; x1 = (double) (i + 1) / N; k = 0; if (x0 * x0 + y0 * y0 <= 1.0) k++; if (x1 * x1 + y0 * y0 <= 1.0) k++; if (x0 * x0 + y1 * y1 <= 1.0) k++; if (x1 * x1 + y1 * y1 <= 1.0) k++; c[k]++; } } for (k = 0; k < 5; k++) printf("c[%d]=%d\n", k, c[k]); return 0; }
c[0]=12, c[1]=5, c[2]=8, c[3]=6, c[4]=69
69+5*0.25+8*0.50+6*0.75=78.75
c[0]=2047, c[1]=58, c[2]=82, c[3]=59, c[4]=7754
c[0]=213614, c[1]=585, c[2]=828, c[3]=586, c[4]=784387 上限下限:3.137548〜3.145544, (25%〜75%で近似)=3.141547
c[0]=21450238, c[1]=5857, c[2]=8284, c[3]=5858, c[4]=78529763 上限下限:3.14119052〜3.14199048, (25%〜75%で近似)=3.14159051
N=10 | N=100 | N=1000 | N=1万 | |
単純に足して2で割る | -0.00159265 | -0.00019265 | -0.00004665 | -0.00000215 |
25%〜75%で近似 | +0.00840735 | -0.00009265 | -0.00004565 | -0.00000214 |
コメント | お名前 | NameLink | |