From: matz@... (Yukihiro Matsumoto) Date: 1998-09-04T16:26:53+09:00 Subject: [ruby-list:9453] Re: bignum - -n まつもと ゆきひろです In message "[ruby-list:9443] Re: bignum - -n" on 98/09/03, Yukihiro Matsumoto writes: |まつもと ゆきひろです ||なんか bignum がおかしいみたいです。 | |すいません.このパッチは1.1c4に間に合いませんでした. |# ごたごたしてる間に忘れてしまってた X-< 昨夜検討してみました.いろいろ謎はあったんですが,以下のよう になりました.すっきりしました. --- bignum.c 1998/07/15 06:12:45 1.1.1.2.2.21 +++ bignum.c 1998/09/04 02:18:18 @@ -559,18 +559,7 @@ - if (RBIGNUM(x)->sign == (RBIGNUM(y)->sign ^ sign)) { - if (RBIGNUM(y)->sign == sign) return bigsub(y, x); + sign = (sign == RBIGNUM(y)->sign); + if (RBIGNUM(x)->sign != sign) { + if (sign) return bigsub(y, x); return bigsub(x, y); } - else if (sign == 0) { - /* x - y */ - if ((RBIGNUM(x)->sign == 0) && (RBIGNUM(y)->sign == 1)) { - /* x is negative and y is positive. */ - /* return -(abs(x) + y) */ - VALUE ret; - RBIGNUM(x)->sign = 1; /* x = abs(x) */ - ret = bigadd(x, y, 1); /* ret = x + y (recursive call) */ - RBIGNUM(ret)->sign = 0; /* ret = -ret */ - return ret; - } - } @@ -583,3 +572,3 @@ } - z = bignew(len, sign==RBIGNUM(y)->sign); + z = bignew(len, sign);