ふなばです。
なんか 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