前提・実現したいこと
(1,1),(-1,1),(-1,-1),(1,1)を頂点とする正方形、中心(0,0)の半径1の円を考えた時、ダーツ1000000本をでたらめに投げた結果n本が円に刺さったとしたら、円の面積はおよそ4*n/1000000となるという方法を使ってC言語で半径1の円の面積を求めたい。
発生している問題・エラーメッセージ
計算結果が0になる。
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#include <time.h> 5 6int main(void){ 7 8 double x,y; 9 int n = 0; 10 double p; 11 12 srand(time(NULL)); 13 14 for(int i = 1; i <= 1000000; i++){ 15 16 x = rand() / (RAND_MAX + 1.0) * 2; 17 y = rand() / (RAND_MAX + 1.0) * 2; 18 19 if((pow(x - 1.0, 2.0) + pow(y - 1.0, 2.0)) <= 0){ 20 21 n++; 22 23 } 24 25 } 26 27 p = 4.0 * n /1000000; 28 29 printf("求める面積は%f\n",p); 30 31 return 0; 32 33}
試したこと
nの値を変えたところ面積も変動するのでfor内がおかしいと思い、乱数の種を現時刻で設定したが作動しなかった。
補足情報(FW/ツールのバージョンなど)
コンパイラはMojave ver.10.14.4ターミナルです。
> (1,1),(-1,1),(-1,-1),(1,1)を頂点とする正方形
同じ座標が2回出てきています…。最後は (1, -1)ですね。
回答3件
あなたの回答
tips
プレビュー