Subscribed unsubscribe Subscribe Subscribe

モンテカルロ法で円周率を求めるワンライナー

何故か円周率ネタの続き。
簡単なのだったらワンライナーで書けるかなーと思って。

$ perl -le '(rand)**2+(rand)**2<1&&$x++for 1..($n=100000000);print$x*4/$n'
3.14167476

この回数で実行に1分くらいかかって精度は3〜4桁程度。ふむー

追記

収束していく様子を観察しながら計算してみるにはこんなカンジか。

$ perl -le 'print$x/$n*4and(rand)**2+(rand)**2<1&&$x++while++$n'

計算方法として正確じゃないけど母数が大きければ誤差の範囲内ってことで許容してみる。
全然収束してくれない残念さがよくわかる。


もしくは、こうか?

$ perl -le 'print+(rand()**2+rand()**2<1?$x++:$x)/$n*4while++$n'