From: Shugo Maeda Date: 1999-07-08T20:03:21+09:00 Subject: [ruby-dev:7293] [BUG] Integer#/ 前田です。 Bignum#/で符合がおかしくなる時があります。 >> 2**30 => 1073741824 >> (2**30).type => Bignum >> 2**30 / -1 => 1073741824 Fixnum#/も符合がおかしくなる時があります。 >> -2**30 => -1073741824 >> (-2**30).type => Fixnum >> -2**30 / -1 => -1073741824 で、パッチです。 --- bignum.c 1999/05/25 08:25:47 1.1.1.3.2.9 +++ bignum.c 1999/07/08 11:00:51 @@ -725,6 +725,7 @@ zds[i] = (USHORT)(t2 / dd); t2 %= dd; } + RBIGNUM(z)->sign = RBIGNUM(x)->sign==RBIGNUM(y)->sign; if (div) *div = bignorm(z); if (mod) { if (!RBIGNUM(y)->sign) t2 = -(long)t2; --- numeric.c 1999/05/18 00:34:41 1.1.1.3.2.10 +++ numeric.c 1999/07/08 11:00:51 @@ -950,7 +950,7 @@ i = FIX2LONG(y); if (i == 0) rb_num_zerodiv(); i = FIX2LONG(x)/i; - return INT2FIX(i); + return INT2NUM(i); /* FIXNUM_MIN / -1 > FIXNUM_MAX */ } return rb_num_coerce_bin(x, y); } -- 前田 修吾 追跡に時間のかかったバグほど修正は簡単である。