えぐち@エスアンドイー です。

>>> 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 とかはよく分かりませんが。

ビット単位の比較でよいので自家製と言う選択もありですが、、
まずは、その数の生成がポータブルに出来るかですね。

	えぐち