From: Tanaka Akira Date: 2004-04-02T14:56:31+09:00 Subject: [ruby-dev:23311] Re: 100000000000000000000000 == 100000000000000000000000.0 In article <1080884868.201381.30812.nullmailer@picachu.netlab.jp>, matz@ruby-lang.org (Yukihiro Matsumoto) writes: > うちでは両方trueになるのですが、なにがいけないんでしょうか。 > > % ruby -ve ' > a = 100000000000000000000000 > b = 100000000000000000000000.0 > p a == b > p b == a > ' > ruby 1.9.0 (2004-04-02) [i686-linux] > true > true うぅむ。 たぶん、rb_big_eq の case T_FLOAT: if (rb_big2dbl(x) == RFLOAT(y)->value) return Qtrue; というところで、rb_big2dbl の返値がレジスタに載ったまま使われていて、 レジスタの 80bit な値と、y から参照されるメモリの 64bit な値を比較する ときに 80bit に拡張されて比較されるため、16bit ぶんの半端な部分になん かの値が入っていて等しくないとされているのではないかと思うんですが。ちゃ んと確認したわけではないんですが、いちおう、bignum.o をコンパイルする 時に -ffloat-store をつけると、こちらでも true に変わります。 でも、そちらで再現しないのなら、私の環境に特有の問題かも知れません。 他に再現する人はいませんか? -- [田中 哲][たなか あきら][Tanaka Akira]