Revert "Fix #71152: mt_rand() returns the different values from original mt19937ar.c"

This reverts commit 6f6bd8ce53.

`mt_rand()` is seedable with `mt_srand()` which means it can be used to (re)produce specific streams of numbers. All code (no matter how few instances that may be) that previously depended on this behaviour will no longer produce the same results.

This kind of change needs to be discussed before being committed.
This commit is contained in:
Leigh 2016-02-18 11:09:01 +00:00
parent aa383d633e
commit a0724d3081
2 changed files with 1 additions and 54 deletions

View File

@ -146,7 +146,7 @@ PHPAPI zend_long php_rand(void)
#define loBits(u) ((u) & 0x7FFFFFFFU) /* mask the highest bit of u */
#define mixBits(u, v) (hiBit(u)|loBits(v)) /* move hi bit of u to hi bit of v */
#define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((php_uint32)(-(php_int32)(loBit(v))) & 0x9908b0dfU))
#define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((php_uint32)(-(php_int32)(loBit(u))) & 0x9908b0dfU))
/* {{{ php_mt_initialize
*/

View File

@ -1,53 +0,0 @@
--TEST--
Test mt_rand() - returns the exact same values as mt19937ar.c
--FILE--
<?php
mt_srand(12345678);
for ($i=0; $i<16; $i++) {
echo mt_rand().PHP_EOL;
}
echo PHP_EOL;
$x = 0;
for ($i=0; $i<1024; $i++) {
$x ^= mt_rand();
}
echo $x.PHP_EOL;
/*
excpect values are obtained from original mt19937ar.c as follows:
int i, x;
init_genrand(12345678);
for (i=0; i<16; i++) {
printf("%d\n", genrand_int31());
}
printf("\n");
x = 0;
for (i=0; i<1024; i++) {
x ^= genrand_int31();
}
printf("%d\n", x);
*/
?>
--EXPECTF--
527860569
1711027313
1280820687
688176834
770499160
412773096
813703253
898651287
52508912
757323740
511765911
274407457
833082629
1923803667
1461450755
1301698200
1612214270