mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Fix #71152: mt_rand() returns the different values from original mt19937ar.c
This commit is contained in:
parent
817ed01320
commit
d31e8a9a85
2 changed files with 54 additions and 1 deletions
|
@ -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(u))) & 0x9908b0dfU))
|
||||
#define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((php_uint32)(-(php_int32)(loBit(v))) & 0x9908b0dfU))
|
||||
|
||||
/* {{{ php_mt_initialize
|
||||
*/
|
||||
|
|
53
ext/standard/tests/math/mt_rand_value.phpt
Normal file
53
ext/standard/tests/math/mt_rand_value.phpt
Normal file
|
@ -0,0 +1,53 @@
|
|||
--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
|
Loading…
Add table
Add a link
Reference in a new issue