|
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 | |