こんばんは、sheepman です。

On Mon, 3 Jan 2005 15:46:39 +0900
Tanaka Akira <akr / m17n.org> wrote:

> 次のように、rand の結果があからさまに一様でない分布を示すことがあるようです。

こんな感じでどうでしょうか。

Index: bignum.c
===================================================================
RCS file: /src/ruby/bignum.c,v
retrieving revision 1.109
diff -u -r1.109 bignum.c
--- bignum.c    3 Sep 2004 09:00:51 -0000       1.109
+++ bignum.c    3 Jan 2005 14:33:49 -0000
@@ -2015,11 +2015,13 @@
        return rb_float_new(rand_buf[0]);
     }
     v = bignew(len,1);
+    len--;
+    BDIGITS(v)[len] = BDIGITS(max)[len] * rand_buf[len];
     while (len--) {
        BDIGITS(v)[len] = ((BDIGIT)~0) * rand_buf[len];
     }
 
-    return rb_big_modulo((VALUE)v, max);
+    return v;
 }
 
-- 
sheepman / TAMURA Takashi
sheepman / tcn.zaq.ne.jp http://sheepman.parfait.ne.jp/