ふなばです。

なんか bignum がおかしいみたいです。

  p ((1 << 128) - -1)

のようなことをすると、結果がマイナスになってしまいます。

で、ぜんぜんわかってなかったりしますが、ちょっと先にすすめたいところな
ので、ムリに手をいれてみました。が、かなりアヤシそうなので、あとはよろ
しくお願いします。


--- bignum.c.orig	Wed Jul 15 15:12:45 1998
+++ bignum.c	Thu Sep  3 09:01:42 1998
@@ -572,6 +572,16 @@
 	RBIGNUM(ret)->sign = 0; /* ret = -ret */
 	return ret;
       }
+      else if (RBIGNUM(y)->sign == 0) {
+	/* y is negative. */
+	/* return x + -y */
+	VALUE ret;
+	sign = 1;
+	RBIGNUM(y)->sign = 1;	/* -y */
+	ret = bigadd(x, y, 1);	/* ret = x + y  (recursive call) */
+	RBIGNUM(y)->sign = 0;	/* y */
+	return ret;
+      }
     }
 
     if (RBIGNUM(x)->len > RBIGNUM(y)->len) {


--Tadayoshi Funaba