前提・実現したいこと
processingでモンテカルロ法という方法を用いた円周率を求める計算を描くところで思っていた動きはするのですが、求める円周率が5.0以上の数値を出しているので何か間違えているのではないかと思うのですが、教えていただけませんか?
以下のコードが5.0以上の円周率になってしまうコードです。
5.0以上の数値が出る問題のコード
float randomX, randomY; float x, y; float full = 0; float in_circle = 0; float wa; float pi; void setup(){ size(400, 200); } void draw(){ background(255); randomX = random(1); randomY = random(1); x = sq(randomX); y = sq(randomY); wa = x + y; if(wa >= 1){ in_circle = in_circle + 1; } pi = full / in_circle; fill(255, 0, 0); textSize(50); text(pi, 0, 100); full=full+1; }
・なぜwa>=1で *in*.circle なのでしょう
・なぜ、pi=full/in_circle なのでしょう
求めるべき値とコードを見比べましょう。
多分今のあなたは1÷(1-π/4)を求めていて、その値は5くらい(4.7くらい)です
(追記:waの判定にイコールが付いてるから、実際には(1-π/4)より小さい値の逆数、つまり5以上の値が得られている訳ですね)
返信ありがとうございます。
[wa>=1 がin_circle]であったのは、円の外だと勘違いしていた時に直し忘れていたもので、直しました。
piを求める除算の順序を間違え、四倍するのを忘れていました。
[pi = 4*(in_circle / full)]
以上を修正したところ、3.14付近を数値が動くようになりました。
恐らくこれで間違いはないと思います。ありがとうございます。
うまくいったようで何よりです
回答1件
あなたの回答
tips
プレビュー