2015年11月3日火曜日

151103

Ruby


Gauss circle problem(4)

f(10 ** i) を調べてみた。
iが9でも計算が合ったが、速度がかなり遅くなった。
(実行時間は7時間弱ほどかかる。)

require 'bigdecimal/math'
include BigMath

def f(r)
  q = r * r
  m = (BigDecimal.new('2').sqrt(12) * r / 2).to_i
  # 正方形の内部またはx軸,y軸上の格子点
  s = (2 * m + 1) * (2 * m + 1) + (r - m) * 4
  # 上記以外
  (m + 1..r).each{|x| s += 8 * (BigDecimal.new((q - x * x).to_s).sqrt(12)).to_i}
  s
end

(0..9).each{|i| p f(10 ** i)}

出力結果
5
317
31417
3141549
314159053
31415925457
3141592649625
314159265350589
31415926535867961
3141592653589764829

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。