まつもと ゆきひろです

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);