[#28337] constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

15 messages 2006/02/18
[#28338] Re: constant look up order in CVS HEAD — Tanaka Akira <akr@...17n.org> 2006/02/19

In article <1140229116.805371.31930.nullmailer@x31.priv.netlab.jp>,

[#28341] Re: constant look up order in CVS HEAD — GOTOU Yuuzou <gotoyuzo@...> 2006/02/19

In message <87lkw8xfay.fsf@m17n.org>,

[#28342] Re: constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...> 2006/02/19

まつもと ゆきひろです

[ruby-dev:28368] Re: [Fwd: 【るびま】Rubyの歩き方をみて]

From: "Nobuyoshi Nakada" <nobu@...>
Date: 2006-02-22 06:46:33 UTC
List: ruby-dev #28368
なかだです。

> From: Mitsuru FURUI <mfurui@mewe1.mewnet.or.jp>
> To: magazine@jp.rubyist.net
> Date: Wed, 22 Feb 2006 11:18:31 +0900 (JST)
(snip)
>   ・症状
>         bashコマンドラインから以下の行を実行すると Segmentation faultします。
>
>                 ./ruby -e 'printf "%f\n", 0x10000000/((1<<30)*1.0)'
>
>         gdb で runすると以下の所で止まりました。
>
>                 Program received signal SIGSEGV, Segmentation fault.
>                 0x10006236 in rb_big_2comp ()
>                    from /cygdrive/c/home/mfurui/MyDocuments/tmp/ruby/cygruby19.dll

問題はBignum*Floatですね。


Index: bignum.c
===================================================================
RCS file: /pub/cvs/ruby/src/ruby/bignum.c,v
retrieving revision 1.126
diff -U 2 -p -u -r1.126 bignum.c
--- bignum.c	16 Dec 2005 18:59:01 -0000	1.126
+++ bignum.c	22 Feb 2006 06:36:46 -0000
@@ -1171,7 +1171,4 @@ rb_big_mul0(VALUE x, VALUE y)
 	break;

-      case T_FLOAT:
-	return rb_float_new(rb_big2dbl(x) * RFLOAT(y)->value);
-
       default:
 	return rb_num_coerce_bin(x, y);
@@ -1209,4 +1206,7 @@ VALUE
 rb_big_mul(VALUE x, VALUE y)
 {
+    if (TYPE(y) == T_FLOAT) {
+	return rb_float_new(rb_big2dbl(x) * RFLOAT(y)->value);
+    }
     return bignorm(rb_big_mul0(x, y));
 }

In This Thread