ぱいおつ2

π = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 - ...
ってのは最近フェルマーの最終定理って本読んで知ったんですけど、なんの脈絡もなさげな数字の羅列と思ってたのが実はこんな規則がありましたーってのがすごい不思議に感じる。。。

以下チラ裏ベンチマーク。


require 'mathn'
require 'benchmark'

puts Benchmark.measure{
n = 1
tmp0 = 1
tmp1 = "minus"

1000000.times do
n += 2
if tmp1 == "minus" then
tmp0 = tmp0 - (1/n).to_f
tmp1 = "plus"
else
tmp0 = tmp0 + (1/n).to_f
tmp1 = "minus"
end
end
print "Str\n"
}

puts Benchmark.measure{
n = 1
tmp0 = 1
tmp1 = true

1000000.times do
n += 2
if tmp1 == true then
tmp0 = tmp0 - (1/n).to_f
tmp1 = false
else
tmp0 = tmp0 + (1/n).to_f
tmp1 = true
end
end
print "true false in\n"
}

puts Benchmark.measure{
n = 1
tmp0 = 1
tmp1 = true

1000000.times do
n += 2
if tmp1 == true then
tmp0 = tmp0 - (1/n).to_f
else
tmp0 = tmp0 + (1/n).to_f
end
tmp1 ^= true
end
print "ture false ^=\n"
}

puts Benchmark.measure{
n = 1
tmp0 = 1
tmp1 = -1

1000000.times do
n += 2
tmp0 += tmp1 * (1/n).to_f
tmp1 *= -1
end
print "not use if\n"
}


Str
  • user ave = 13.6575
  • system ave = 0.83
  • real ave = 14.49137625
true false in
  • user ave = 13.5425
  • system ave = 0.815
  • real ave = 14.35830425
true false ^=
  • user ave = 13.6025
  • system ave = 0.83
  • real ave = 14.51989075
not use if
  • user ave = 13.585
  • system ave = 0.86
  • real ave = 14.444624
if文使ってないからnot use ifが一番かと思ったら違った...
真偽の二つも、俺的に^=使った方が速くなる気がしたのにぃ

ちなみに環境はubuntu server on i7 860@4GB

0 コメント: