From: "U.Nakamura" Date: 2006-07-11T07:26:15+09:00 Subject: [ruby-dev:29013] problem in bignorm こんにちは、なかむら(う)です。 bignum.cのbignorm()の中で、 if (len*SIZEOF_BDIGITS <= sizeof(VALUE)) { としている判定文がありますが、ここで本当に見ないといけないの は、「len*SIZEOF_BDIGITSがVALUEに収まるかどうか」ではなくて、 「len*SIZEOF_BDIGITSがlongに収まるかどうか」なのではないかと 思いますが、どうでしょうか。 Index: bignum.c =================================================================== RCS file: /home/cvs/ruby/bignum.c,v retrieving revision 1.131 diff -u -1 -p -r1.131 bignum.c --- bignum.c 3 Jul 2006 20:07:09 -0000 1.131 +++ bignum.c 10 Jul 2006 22:22:00 -0000 @@ -104,3 +104,3 @@ bignorm(VALUE x) - if (len*SIZEOF_BDIGITS <= sizeof(VALUE)) { + if (len*SIZEOF_BDIGITS <= sizeof(long)) { long num = 0; もっと深く踏み込むと、そもそもこれも「VALUEとlongが同じサイズ」 と暗黙のうちに仮定してFixnumかBignumかの敷居ををlong(より1bit 小さい値)で決めてしまっているのが問題なわけで、longよりVALUE が大きい場合にはFixnumの範囲をそこまで拡大すべきである、と思 うのですが、やりだしたら深みにはまったので、見なかったことに します ^^; それでは。 -- U.Nakamura これでmake testまでとおった