ごとけんです

In message "[ruby-math:00061] Re: NaN again"
    on 00/01/18, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes:
>ご> これは、1.0/-Inf が正当なことを仮定しているので良くないのでは??
>                ↑-0.0 ですね

その通りです __;;;

>ご> [y].pack("G").unpack("B")[0][0] == ?0
>MSB がセットされていない事を調べている、、のですよね。

そうです。 [-0.0].pack("G")[0][7] == 0 と同じです。

>pack/unpack って最後の手段的な感じですが、他にはどうも
>方法が思い付かないです。(copysign() は ruby にないし、、)

たぶん他には独立した検査方法は無いと思います。

# しかし、こんなにお手軽に double のフォーマットが調べられる
# 言語もあるまい(←自画自賛 :-)

>  NaN と何を比較しても不一致
>と言う面白い性質を ruby で体験できなくなるとは言えます。
>とはいえ <=> が NaN を伴った場合との不統一感は否めませんね。

NaN だけのために Float が全順序集合でなくなるというのも結構
すごい仕様ではありますね、IEEE754って。quiet NaN の由来を考
えてみるに、静的に検査できることが目的だったのですから、NaN 
を含むpositiveな(つまり否定形でない)比較はすべて false を返
すという仕様でも悪くないかも知れません。

>どちらかと言うと、1.0 <=> NaN = NaN 説に傾きつつあります。
>(1.0 - NaN = NaN からの類推、例外は発生しないと言う立場です)

うーむ、それはそれでよいなぁ。NaNも一応Numericだし。一票入れ
ときます。

>  % ./ruby -e 'p "%10.1E" % -0.0'
>  "  -0.0E+00"
>
>こんな事は出来ましたが、、
>
> + -0.0 の検出方法に問題を感じる
> + 元々ちゃんと -0.0 を表示できる場合も実行している
>   (configure で検出すべき?)
> + -0.0 を -1.0 にすり替えて '1' => '0' なんてあんまりだ!

これでいいんじゃないですか?? ただ、すくなくとも configure で
の検出はしたほうがよいでしょうね。

-- gotoken