From: Tadashi Saito Date: 2005-09-20T23:32:52+09:00 Subject: [ruby-dev:27235] Re: 1/2 under mathn こんばんは。斎藤と申します。 ChangeLogから: Mon Sep 19 01:07:38 2005 Yukihiro Matsumoto * numeric.c (Init_Numeric): should define Fixnum#div. [ruby-dev:27129] この変更で"ruby -rmathn -e '1/2'"は正常に終了するようになったよう ですが、Fixnum#divにFloatを渡した場合、Floatが返るようになって しまいました。 $ ruby -ve 'p 1.div(2.0)' ruby 1.9.0 (2005-09-20) [i686-linux] 0.5 もともと[ruby-dev:26723]で、自分がcoerceを減らすパッチを作成・適用 していただいたのですが、その後[ruby-core:05524]でそのパッチのミス が発覚し、それをまつもとさんが修正くださいました。しかしそれによって 上記のdivが整数を返さない問題が発生し、それを修正するために自分が [ruby-core:05531]でFixnum#divを削除するパッチを提案し、採用して いただいたという(自分の下らないミスによる)経緯があります。 もとから違う意味を持つ / と div ですから、別の関数として実装すると いうのがまず考えられる素直な解(1)だと思います。実際これで最も単純 に、丸く収まるでしょう。 しかしFixnum#divの定義が削除された場合、単にNumeric#divが代わりに 動いているだけであり、それで問題が起こるのはmathn.rb, rational.rb 側の責任だ、とも言えるかも知れません(2)。 結局自分では、(1)と(2)のどちらが「正しい」解なのか、よく分かりません でした。とりあえずまとめると、現状「aFixnum.div(aFloat)」に問題がある、 ということしか伝えられません。力になれずすみません。 -- 斎藤ただし