// モンテカルロ法で円周率を求める #include #include int main(void) { double x, y, pi; int n, i, count; // nを100,1000,10000,100000,100000で試す for(n = 100; n <= 1000000; n = n * 10){ count = 0; for(i = 0; i < n; i++){ // 0〜1の間の乱数を求める // (RAND_MAX+1)が乱数の最大値なので // 乱数をこれで割れば0.0〜1.0の乱数が求まる // 1.0としているのは整数同士だと切り捨てになるので // 割る数を実数にするため x = rand() / (RAND_MAX + 1.0); y = rand() / (RAND_MAX + 1.0); if(x * x + y * y <= 1.0){ count++; } } // 円周率を求める pi = (double)4 * count / n; printf("%7d個の点を打ったとき、%6d個が円の中に入り、円周率は%fとなった\n", n, count, pi); } return 0; }