From: Tadayoshi Funaba Date: 2008-02-19T07:29:35+09:00 Subject: [ruby-dev:33848] Re: rational, complex and mathn > 次のような小さな数に対する積のベンチマークでは、rational-1.19 の方が4倍 > ぐらい速いみたい。何が原因かこれから研究します。 それは原さんが頑張って最適化しているからでしょう。少しづつ整理されてき ていますが、僕のは殆どなにもしていないに等しいですから。うちだと4倍ど ころじゃないですね。 > $ ruby -I../rationa-1.19 bench.rb rational-1.19 >> benchmark.log > $ ruby -I../nurat-0.0.4/lib:../nurat-0.0.3/ext bench.rb nurat-0.0.4 >> > benchmark.log これだと 0.0.3 をつかってしまいそうですが。ま、あまり変りないかもしれ ませんが。 原さんのはかけ算が圧倒的に速いですね。ただ、加減算などになるとあまり違 いがなくなってきて、特に数が大きくなると、nurat のほうが速くなったりす るようです。いいところをうまく取りこめるといいですが。 --- hara-bench.rb Tue Feb 19 06:49:34 2008 +++ hara-bench-n.rb Tue Feb 19 06:59:31 2008 @@ -28,7 +28,7 @@ bm("product-small", $libname) do s = Rational(1) a.each do |x| - s *= x + s += x end end end --- hara-bench.rb Tue Feb 19 06:49:34 2008 +++ hara-bench-n2.rb Tue Feb 19 07:00:08 2008 @@ -22,13 +22,13 @@ end def prod1 - n = 10**4 - a = sa('a', 1, 100, n).zip(sa('b', 1, 100, n)).map{|x, y| Rational(x, y)} + n = 10**2 + a = sa('a', 10**30, 10**40, n).zip(sa('b', 10**30, 10**40, n)).map{|x, y| Rational(x, y)} bm("product-small", $libname) do s = Rational(1) a.each do |x| - s *= x + s += x end end end --- hara-bench.rb Tue Feb 19 06:49:34 2008 +++ hara-bench-n3.rb Tue Feb 19 07:01:04 2008 @@ -22,13 +22,13 @@ end def prod1 - n = 10**4 + n = 10**5 a = sa('a', 1, 100, n).zip(sa('b', 1, 100, n)).map{|x, y| Rational(x, y)} bm("product-small", $libname) do - s = Rational(1) + s = Rational(2) a.each do |x| - s *= x + s **= x end end end