えぐち@エスアンドイー です。 >>> On Sun, 7 Feb 1999 00:11:47 +0900, gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) said: gotoken> ごとけんです gotoken> gotoken> In message "[ruby-dev:4780] Re: compare to NaN (Re: Re: call for finite/isnan testers)" gotoken> on 99/02/06, Yukihiro Matsumoto <matz / netlab.co.jp> writes: gotoken> gotoken> >まつもと ゆきひろです gotoken> > gotoken> >In message "[ruby-dev:4760] compare to NaN (Re: Re: call for finite/isnan testers)" gotoken> > on 99/02/06, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes: gotoken> > ... gotoken> > Float::infinite?は真の時に正数,負数を返す仕様は妥当か gotoken> > gotoken> > このFloat::INFINITYやFloat::NaNのシステムはごとけんさんの gotoken> > Float抽象クラス化と衝突しないか gotoken> gotoken> 確かに実装上は double だから Float なんですけど、 gotoken> 実際は Numeric::INFINITY というのがあって、それを gotoken> 比較のときは適当なのとくらべる方がすっきりするような gotoken> 気もします。Complex だと実部か虚部かどっちかが gotoken> 無限大だったら無限大というように、無限大自体は gotoken> 数値ではないけど普通数値と言うと無限大を想定するのは gotoken> わりと自然です。 Complex() は実/虚の要素について極力介入してないようで、 require "Complex" p(Complex("a", "b") + Complex("1", "2")) Complex("a1", "b2") と言うように、要素の基本的な性質に任せています。 Complex::INFINITY が必要な局面はちょっと思い当たりません。 gotoken> またこの場合、Integer::INFINITY, Float::INFINITY, gotoken> SingleFloat::INFINITY, DoubleFloat::INFINITY gotoken> というのがあった方がよいかも知れません。NaN も同様です。 Integer::INFINITY を仮定するなら、 ゼロ除算例外は否定しなければいけないでしょう。 また、 Float::INFINITY == SingleFloat::INFINITY は真ですか? gotoken> もう一つの考え方は、NaN, +-Inf それぞれ一つで、 gotoken> 一括して Numeric の定数だとする考え方です。 これに賛成です。 #私には Ruby の Numeric は Number で、Math が Numeric に #思えるのですが、、 gotoken> それから、いずれにしても定数に関して演算の規則を gotoken> 規定しなければなりませんね。 IEEE 754 のアヤシイ訳を gotoken> 読んで検討してみます。 このへん難解なので、是非よろしくお願いします。 gotoken> > isinf(),isnan()の移植性をどうするか.ごとけんさんの調査待 gotoken> > ちか. gotoken> gotoken> isnan() 相当はどこにでもあって、finite() もしくは isinf() gotoken> ならどこにでもある模様です。 gotoken> BeOS, NeXT, それから 64 bit の Alpha とかはよく分かりませんが。 ビット単位の比較でよいので自家製と言う選択もありですが、、 まずは、その数の生成がポータブルに出来るかですね。 えぐち