From: Tadayoshi Funaba Date: 1998-09-03T09:21:04+09:00 Subject: [ruby-list:9429] bignum - -n ふなばです。 なんか 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