乱数で円周率を近似するプラグラム
#include <stdio.h> #include <stdlib.h> int main(void) { int n_trial = 1000000; int n_inside; int i; double x, y; double r; double pi; n_inside = 0; for (i=0; i<n_trial; i++) { x = 2*(double)rand()/RAND_MAX -1; y = 2*(double)rand()/RAND_MAX -1; if (x*x+y*y<=1) { n_inside++; } } r = (double) n_inside/n_trial; pi = 4 * r; printf("pi = %.7g\n", pi); return 0; }
を実行すると
pi = 3.142872
と1000000回時の正しい値が出力されます。
これを改良し、
10回、100回、1000回、10000回、100000回、1000000回時それぞれのpiの値を表示させようと以下のプログラム
#include <stdlib.h> int main(void) { int n_trial = 1000000; int n_inside; int i; double x, y; double r; double pi; n_inside = 0; for (i=10; i<n_trial; i=i*10) { x = 2*(double)rand()/RAND_MAX -1; y = 2*(double)rand()/RAND_MAX -1; if (x*x+y*y<=1) { n_inside++; r = (double) n_inside/n_trial; pi = 4 * r; printf("回数%d pi = %.7g\n",i, pi); }} return 0; }
に変更しましたが、出力が
回数10 pi = 4e-06
回数100 pi = 8e-06
回数10000 pi = 1.2e-05
回数100000 pi = 1.6e-05
となってしまい、しかもpiの値もおかしくなってしまいます。
どう直せば 10,100,1000,10000,100000,1000000回と10倍回数ごとのpiの近似表示にできるのかご存じの方よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー