Browse Source
Fixed bug #75170
Fixed bug #75170
This change may result in different mt_rand/rand sequences being generated on 64-bit systems for a specific seed. See also https://externals.io/message/100229.pull/2743/head
4 changed files with 99 additions and 29 deletions
@ -0,0 +1,32 @@ |
|||
--TEST-- |
|||
Bug #75170: mt_rand() bias on 64-bit machines |
|||
--CREDITS-- |
|||
Solar Designer in https://externals.io/message/100229 |
|||
--FILE-- |
|||
<?php |
|||
|
|||
// PHP pre-7.1.0 modulo bias |
|||
mt_srand(1234567890); |
|||
$total = 10000; |
|||
$max = 0x66666666; |
|||
$halves[0] = $halves[1] = 0; |
|||
for ($i = 0; $i < $total; $i++) { |
|||
$halves[(mt_rand(0, $max - 1) >> 1) & 1]++; |
|||
} |
|||
printf("%.1f%% vs. %.1f%%\n", 100. * $halves[0] / $total, 100. * $halves[1] / $total); |
|||
|
|||
// PHP 7.1.0 to 7.2.0beta2 modulo bias bug found during work |
|||
// on http://www.openwall.com/php_mt_seed/ |
|||
mt_srand(1234567890); |
|||
$total = 10000; |
|||
$max = 0x66666666; |
|||
$halves[0] = $halves[1] = 0; |
|||
for ($i = 0; $i < $total; $i++) { |
|||
$halves[mt_rand(0, $max - 1) / ($max / 2)]++; |
|||
} |
|||
printf("%.1f%% vs. %.1f%%\n", 100. * $halves[0] / $total, 100. * $halves[1] / $total); |
|||
|
|||
?> |
|||
--EXPECT-- |
|||
49.5% vs. 50.5% |
|||
50.5% vs. 49.5% |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue