ごとけんです

In message "[ruby-math:00056] Re: NaN again"
    on 00/01/18, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes:

>∞, NaN と ±0 についての調査は必要性を感じますね。

ですね。

>ご> IEEE754的には a/-Inf は -0.0 じゃないとダメですね。
>
>これは計算結果を間違えるだけでなく、+0/-0 を正しく表示出来るかも問題です。

は!! そうか。

>fl000118.rb でも "%+.1f" を使っていますが、libc の printf() が、
>-0.0 を "+0.000000" と表示するバグを多くの処理系が持っていますので、
>
>--- fl000118.rb	Tue Jan 18 10:16:33 2000
>+++ fl000118a.rb	Tue Jan 18 10:28:14 2000
>@@ -18,8 +18,10 @@
> 	    "+"
> 	  elsif 0 > y
> 	    "-"
>-	  else
>-	    "%+.1f" % y
>+	  elsif 0.0 == y
>+	    1.0 / y > 0.0 ? "+0.0" : "-0.0"
>+	  else 
>+	    "???"
> 	  end
> 	when FalseClass
> 	  "F"
>
>とする必要があります。

これは、1.0/-Inf が正当なことを仮定しているので良くないのでは??

[y].pack("G").unpack("B")[0][0] == ?0

くらいしか思い付きません。

>NaN との比較は難物ですね、
>わたしも現状の仕様である、「NaN との比較は偽」が自然だと思います。

FloatDomainError はどうでしょう??

>ご> sqrt(-0.0) は -0.0 を返さないといけないことになってますが、
>ご> 少なくともFreeBSDの libm はそうなってません。
>
>これも printf() の問題でないですか>

でした。

>BigFloat と Float に同等のテストを行った場合の結果の一致は、
>誰もが期待する事だと思いますが、``Inf'' のテスト結果と言うのが
>前述の±0の問題であるのなら、ruby の printf で対策するのが
>妥当だと思います。(あと本来なら、printf(3) にも、、)

rb_f_sprintf() の修正はやったほうがほうが良さそうですね。

-- gotoken