@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Rubyでπを計算する

jRubyが並列に動くのか確かめたいです。 CPUバウンドな時間が掛かる処理があるといいはず。 計算に時間が掛かる処理と言えばπの計算です。 BigMath::PIより早く円周率を計算する - Qiitaを参考にして、Rubyでπを計算してみます。

require "bigdecimal"
require "benchmark"

result = Benchmark.realtime do
  prec = 100
  conv = 6
  a = BigDecimal("1")
  b = BigDecimal("1") / BigDecimal("2").sqrt(prec)
  t = BigDecimal("1") / 4
  p = BigDecimal("1")

  for n in 1..conv do
    an = (a + b) / 2
    b = (a * b).sqrt(prec)
    t -= p * (an - a) * (an - a)
    p *= 2
    a = an
  end

  puts (a + b) * (a + b) / (4 * t)
end

puts "Time: #{result}s"

動かしてみます。

ledsun@MSI:~/ruby-pi►ruby pi.rb
Time: 0.19301386800361797s

参考記事より一桁おそいです・・・。 僕の実行環境は 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz なので、2015年の実行環境より遅い確率は低いはずです。 参考にその他の情報も残しておきます。