[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23311] Re: 100000000000000000000000 == 100000000000000000000000.0

From: Tanaka Akira <akr@...17n.org>
Date: 2004-04-02 05:56:31 UTC
List: ruby-dev #23311
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]

In This Thread