From: Nobuyoshi Nakada Date: 2006-02-22T15:46:33+09:00 Subject: [ruby-dev:28368] Re: [Fwd: 【るびま】Rubyの歩き方をみて] なかだです。 > From: Mitsuru FURUI > 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)); }