Rubyでπを計算する - @ledsun blog でπを計算するRubyスクリプトが動くことがわかりました。 WSLにjRubyをインストールしてみる - @ledsun blog で設定したjRubyで動かしてみます。
ledsun@MSI:~/ruby-pi►rbenv local jruby-9.3.7.0 ledsun@MSI:~/ruby-pi►ruby pi.rb
まるっきり終わりません。
このスクリプトは ガウス=ルジャンドルのアルゴリズム - Wikipedia を採用しています。
計算を繰り返す回数を増やすと求められるπの桁数が増えます。
スクリプト中のconv
変数が繰返す回数を指定しています。
つまりアルゴリズムを変更せずに計算時間が調整できるパラメーターです。
この値を調整してためしてみます。
jRuby
1
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.027010284014977515s
2
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.2614899040199816s
3
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 1.905935324029997s
4
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 31.895614359993488s
こんなふうに計算時間がふえることあるのでしょうか? アルゴリズムは再帰していません。
GCでしょうか? ガタガタになるしても線形に増えそうなものです。 そもそもこの程度のオブジェクト数でGCが走るのでしょうか?
Ruby 3.1.2
Ruby 3.1.2でも試してみます。
ledsun@MSI:~/ruby-pi►rbenv local 3.1.2
1
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.00016911199782043695s
2
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.00015715498011559248s
3
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.004318212973885238s
4
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.007067304977681488s
5
ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.1696732720010914s
あ、これ求める桁数が増えると線形以上に計算時間が増えるもんなんですね。 単に jRuby が Ruby 3.1 の200倍遅いのでしょうか?