ごとけんです

In message "[ruby-math:00046] NaN"
    on 00/01/15, "Shigeo Kobayashi" <shigeo / tinyforest.gr.jp> writes:

>以下の結果は正しいのでしょうか?
>
>p a=0.0/0.0   #  ==> -1.#IND
>
>私は、"NaN"と表示されることを期待したのですが?
>
>isnan.cを見ると、以下のようになっています。
>int
>isnan(n)
>  double n;
>{
>  return double_ne(n, n);
>}
>
>static
>int
>double_ne(n1, n2)
>  double n1, n2;
>{
>  return n1 != n2;
>}

>因みに、こちらはWindowsNT+VC++6.0の
>環境で、Ruby 1.4.3です。

おろ、VCではisnan()は float.h の _isnan() を使うんじゃなかっ
たでしたっけ…どうだったか覚えてます?? > えぐちさん方面 ^^;;

>「n1 != n2」の比較は確かに論理的には正しいような
>気がしますが、実際の動作はFALSEになるようです。
>
>UNIX環境では、TRUEになるのでしょうか?

です。IEEE754ではそう決まってるんで今のmissing/isnan.cにしたんでしょ
うね。おそらく。

んで、VCでisnan()を

#include <float.h>
#define isnan(x) _isnan(x);

で置き換えて作り直したらどうなりますか?? 


あ、それとは別に、0.0/0.0の動作もちょっと気になりますので、
先に以下を試してもらえませんか??

  b = [0.0/0.0].pack("G").unpack("B64")[0]
  p [b[0,1], b[1,11], b[12,52]]

ちなみにはうち(1.4.3 (1999-12-07) [i386-freebsd3.2])ではこう
なります:

["1", "11111111111", "1000000000000000000000000000000000000000000000000000"]

-- gotoken