小林@会社です。

----- Original Message ----- 
送信者 : GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp>
件名 : [ruby-math:00055] Re: NaN again
 
> >p b<=>a  #               1   -1   0?  (should be NaN?)
> >p a<=>b  #              -1    1   0?  (should be NaN?)
> 
> 手元ではちゃんと FloatDomainError になります
>
ありゃ?
たぶん、またコンパイラーの差ですね。帰ったら調べてみます。
ただ、ここだけ FloatDomainError になるのも妙な気がします。
 
> >p a==b   #                F    F   T?
> >p b==a   #                F    F   T?
> >p a!=b   #                T    T   F?
> >p b!=a   #                T    T   F?
> 
> この4つの NaN との比較は間違っています。
> 
「比較するのが間違い」、「比較の結果が間違い」
のどちらでしょうか?

> >p a<b    #                T    F   T?
> >p b<a    #                F    T   T?
> >p a<=b   #                T    F   T?
> >p b<=a   #                F    T   T?
> 
> IEEE754的にはこれらのNaNとの比較については例外を無効演算例外
> を発生しなければならないことになっていて結果は定義されていな
> いのでなんともいえません。難しい問題ですが直観的には全部、偽
> を返すのが自然に思えます。また、その点を考慮して2つの数が比
> 較不能の関係にあること調べる演算unorderedの実装が推奨されて
> います。
> 
こここそ FloatDomainError になるほうがよい気がします。
(ただ、以下に記述しましたように、仕方がないような気もします)

> 
> ># BigFloat にInfやNaNをいれようとしています(未完)。
> ># これは、Floatに合わそうと思います。
> 
> 合わせるということの意味は上のテストの結果と揃えるという意味
> ですか??
できるだけ「結果を揃える」ようにしようと思っています。
前にnumeric.cを見た時の記憶として、なるべくコンパイラーに
処理を任せようとしている印象を受けました。これは Float の
性質上(スピード上)仕方がないと思います。逆にBigFloatは
コンパイラー任せにできません。この点で、差異が出てくると
は思います。

> なんとなく Inf はそれではいけないような気がするんで
> すが。ただどうあるべきかはよく分かりません。
> 
「あり得る」ものとして、どのようなことが想定できますか?

> 
> # うちの結果と検査用スクリプトつけます
> 
拝見しました。こんなのがさっと書けるとプログラミングが
「楽しく」なるでしょうね。

小林 茂雄
E-Mail: shigeo / tinyforest.gr.jp
WWW: http://www.tinyforest.gr.jp