summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-30 12:55:04 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-30 12:55:04 +0000
commitfe22f83ecf03f969860ce8cddc53d9917e32cbc2 (patch)
tree7cfb4086c1e961b59574fb86557aff4a7cbdbb1f
parent6937a3e26f15199cb2c2cd180f2e83d941eaad8b (diff)
* random.c (init_genrand): ensure invariant of mt->next and mt->left.
mt->next should always equal mt->state + N + 1 - mt->left. In fact, 'r = Random.new(0); r == r.dup' has returned false. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24325 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--random.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ef9d4b2cb..02acc2ebba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Jul 30 21:48:56 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * random.c (init_genrand): ensure invariant of mt->next and mt->left.
+ mt->next should always equal mt->state + N + 1 - mt->left.
+ In fact, 'r = Random.new(0); r == r.dup' has returned false.
+
Thu Jul 30 21:43:41 2009 Yusuke Endoh <mame@tsg.ne.jp>
* random.c (random_bytes): use NUM2LONG instead of FIX2LONG because
diff --git a/random.c b/random.c
index bfdfaf6f3c..7aefb4d4fb 100644
--- a/random.c
+++ b/random.c
@@ -98,7 +98,7 @@ init_genrand(struct MT *mt, unsigned int s)
mt->state[j] &= 0xffffffff; /* for >32 bit machines */
}
mt->left = 1;
- mt->next = mt->state + N - 1;
+ mt->next = mt->state + N;
}
/* initialize by an array with array-length */