>From: Ogino Junya <ogino / duo.co.jp>
>Subject: [ruby-list:27050] BigNum#modulo problem?

> 以下のように modulo が期待通りの結果を返しません。
> 
> % ruby -ve 'p 6800000000%4000000000'
> ruby 1.6.2 (2000-12-25) [i386-netbsd1.5.]
> -1494967296

以下のパッチで直ると思います。

田中昌宏

--- bignum.c~	Thu Dec 21 22:21:53 2000
+++ bignum.c	Sun Jan  7 15:27:40 2001
@@ -829,8 +829,12 @@
 	    t2 %= dd;
 	}
 	RBIGNUM(z)->sign = RBIGNUM(x)->sign==RBIGNUM(y)->sign;
-	if (!RBIGNUM(x)->sign) t2 = -(long)t2;
-	if (modp) *modp = rb_int2big((long)t2);
+	if (modp) {
+	    *modp = bignew(1,RBIGNUM(x)->sign);
+	    BDIGITS(*modp)[0] = (BDIGIT)t2;
+	    if (!t2)
+	        RBIGNUM(*modp)->len = 0;
+	}
 	if (divp) *divp = z;
 	return;
     }