зеркало из https://github.com/github/ruby.git
* random.c (rand_init): Make it possible to specify arbitrary array
for init_genrand(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43736 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
cdde8c23de
Коммит
ced9ad5ab5
|
@ -1,3 +1,8 @@
|
||||||
|
Wed Nov 20 19:45:22 2013 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* random.c (rand_init): Make it possible to specify arbitrary array
|
||||||
|
for init_genrand().
|
||||||
|
|
||||||
Wed Nov 20 17:34:13 2013 Koichi Sasada <ko1@atdot.net>
|
Wed Nov 20 17:34:13 2013 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* parse.y (rb_gc_mark_symbols): set global_symbols.minor_marked only
|
* parse.y (rb_gc_mark_symbols): set global_symbols.minor_marked only
|
||||||
|
|
6
random.c
6
random.c
|
@ -377,18 +377,12 @@ rand_init(struct MT *mt, VALUE vseed)
|
||||||
seed = rb_to_int(vseed);
|
seed = rb_to_int(vseed);
|
||||||
|
|
||||||
len = rb_absint_numwords(seed, 32, NULL);
|
len = rb_absint_numwords(seed, 32, NULL);
|
||||||
if (MT_MAX_STATE < len)
|
|
||||||
len = MT_MAX_STATE;
|
|
||||||
if (len > numberof(buf0))
|
if (len > numberof(buf0))
|
||||||
buf = ALLOC_N(unsigned int, len);
|
buf = ALLOC_N(unsigned int, len);
|
||||||
sign = rb_integer_pack(seed, buf, len, sizeof(uint32_t), 0,
|
sign = rb_integer_pack(seed, buf, len, sizeof(uint32_t), 0,
|
||||||
INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
|
INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
|
||||||
if (sign < 0)
|
if (sign < 0)
|
||||||
sign = -sign;
|
sign = -sign;
|
||||||
if (sign != 2) { /* not overflow */
|
|
||||||
while (0 < len && buf[len-1] == 0)
|
|
||||||
len--;
|
|
||||||
}
|
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
len = 1;
|
len = 1;
|
||||||
|
|
|
@ -177,7 +177,7 @@ class TestRand < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_big_seed
|
def test_big_seed
|
||||||
assert_random_int(%w(1143843490), 0x100000000, 2**1000000-1)
|
assert_random_int(%w(2757555016), 0x100000000, 2**1000000-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_random_gc
|
def test_random_gc
|
||||||
|
|
Загрузка…
Ссылка в новой задаче