From: EGUCHI Osamu Date: 1999-02-11T01:57:34+09:00 Subject: [ruby-dev:4992] Re: module Precision えぐち@エスアンドイー です。 >>> On Wed, 10 Feb 1999 23:13:06 +0900, keiju@rational.com (石塚圭樹 ) said: keiju> けいじゅ@日本ラショナルソフトウェアです. keiju> keiju> In [ruby-dev :4938 ] the message: "[ruby-dev:4938] Re: module keiju> Precision ", on Feb/10 01:05(JST) EGUCHI Osamu writes: keiju> keiju> >えぐち@エスアンドイー です。 keiju> keiju> >Smalltalk の generality は実際は keiju> >というプリミティブだったと思いますが、あれでユーザー定義の keiju> keiju> 私の知識はSmalltalk-80のものです. 今は違うんですかね? St80自体は, keiju> generalityはクラス毎に決まった数値を返していました. 私の記憶は、多分 Smalltalk/V あるいは little Smalltalk の ものだと思います。 なので、おそらく実装が違うのですね。 どんなバイトコードを吐くか逆アセンブルして 追いかけてところで、このプリムティブにぶつかって 断念した記憶があり覚えてました。 もう、だいぶ昔のはなしなのだけれども。 keiju> >新規のクラスの一般性も調べられると言うのが今一歩理解できてません。 keiju> >そのため、論点が噛み合っていないかも知れません。 keiju> > keiju> >ruby で keiju> > keiju> > 1.0 + 10 ** 999 keiju> > keiju> >が Inf を生成してしまうのも keiju> > keiju> > Float.generality > Bignum.generality keiju> > keiju> >的な発想からだと思います。 keiju> keiju> そうだと思います. でも, それで良いと思いますが? keiju> keiju> 自動的な変換で粗悪なもの(Float)から精製されたもの(Integer)に変換するの keiju> は問題ありです. 上の式は、定数が入っているので自明だけれども Ruby の型のわからない変数で表現された式で、オーバーフロー を起こされると、『んぁんでだ〜』となってしまう事が、ままあり、 精度よりレンジを保存して欲しかったなぁ、などとも思って見ましたが、 砂まみれ状態の浮動小数からの精度汚染を避けなければいけない と言う問題は、やはり避けられませんね。 keiju> >型同士の一般性の比較でなく、値同士の domain の keiju> >比較に持って行かないと、みんな Float に吸い込まれてしまい keiju> >結局 +/-無限かゼロ、あるいは NaN (!) にまるめられてしまう keiju> >様に思います。 keiju> keiju> 上述のようにそれはそれでしかたないと思います. いやであれば, 途中で明示 keiju> 的に片変換を行なうと. そうですね! 『型チェックが不要で、良きに計らってくれる』 のが、Ruby であり OO である。 と言う認識は、誤りな好例か知れません 『型チェックや領域判断を素直にコードに実装できる』 のが、Ruby であり OO である。 と言う認識を持つべきですね。 えぐち