土岐です。

From: Sinichiro Dezawa <dezawa / miya.fujifilm.co.jp>
Subject: [ruby-list:11690] Re: Numeric#step の増減方向
Date: Sun, 24 Jan 1999 22:57:18 +0900

>  これは減らしができないので、厄介でした。
>  私も step は存在を知らない口でしたが、これからはこれで行こう。
> 	ところで、step +1 でよい時はどっちちの方が軽いのでしょう?

min..max だと Range オブジェクトに変換されるので、step の方が速いんじゃ
ないかと思います。でも、step +1 だと実は step イテレータを使う必要はな
くて、upto という専用のイテレータがあったりします(リファレンスマニュア
ルによると、Range は upto を呼んでいるようです)。step -1 のときは 
downto イテレータが使えます。さらに初期値が 0 から始まるときは times 
というイテレータがあり、わたしはこのイテレータをよく使ってます。そして 
step イテレータの出番はどんどん減ってゆくのでした。

ワン・ライナーで各イテレータの簡単なベンチマークをとってみました。やは
り Range オブジェクトはオーバーヘッドがある分、遅いみたいです。あれ、
わたしは upto より times の方が速そうな印象を持ってたんだけど、逆です
ね、ちょっと意外だった。

% time ruby -e '(1..1000000).each{|i|}'
6.279u 0.019s 0:07.23 86.8%     362+489k 0+4io 0pf+0w

% time ruby -e '1.step(1000000, 1){|i|}'
3.844u 0.029s 0:04.67 82.6%     360+485k 0+6io 0pf+0w

% time ruby -e '1.upto(1000000){|i|}'
3.582u 0.009s 0:04.33 82.6%     360+486k 0+6io 0pf+0w

% time ruby -e '1000000.times{|i|}'
3.865u 0.009s 0:04.70 82.1%     362+489k 0+6io 0pf+0w

----------------------------------------------------------------------------
土岐 仁謙	神戸大学高エネ研 M1
URL: http://www3.phys.sci.kobe-u.ac.jp/~toki/index.html
PGP fingerprint = D0 A8 90 AB 73 F8 34 FE  CE CA DB BF 01 30 C0 35