From: Shin-ichiro HARA Date: 2007-11-12T12:43:55+09:00 Subject: [ruby-dev:32222] Re: floor (Re: Re: Date#+に大きな数字を与えるとおかしな日付に) 原です。 Tadayoshi Funaba wrote: >> floorを使わない理由はrationalに対してfloorを使うと結局floatを経由してしまうみたいだからです。 > > 本質的には、Numeric#floor が数値クラス全体に対して十分一般的でない定義 > になっているからだと思うので、直せるならそこを直したほうがいいように思 > いますが、無理なら、Rational のほうで、直してほしいです。現在、ruby で > to_i の仕様がどうなっているか忘れましたが、floor は、divmod(1)[0] と等 > しいはずだと思います。 > > ceil や truncate あたりもあやしくて、さらに truncate については、原さ > んの rational にも定義がないようです (ceil などはあるのですが)。 定義し忘れていたので、直しました。 http://blade.nagaokaut.ac.jp/~sinara/ruby/rational/ に rational-1.17 を置きました。truncate が lisp と同じになるはずです。 ちなみに Rational#to_i は Rational#truncate と同じです。 floor は divmod(1)[0] と同じ。ceil もあやしくないはずです。 ruby はめんどくさくなると floor に投げるようになっていますが、それはそ れで仕方がないんじゃないですかね。