まつもと ゆきひろです
In message "[ruby-list:9443] Re: bignum - -n"
on 98/09/03, Yukihiro Matsumoto <matz / netlab.co.jp> 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);