Я генерирую последовательность псевдослучайных чисел с помощью этого кода:
$seed = 1;
srand( $seed );
for($i=0; $i<10; $i++)
{
echo rand(0,100) . "\n";
}
exit(0);
Следующий код выводит всегда (на моей машине)
84
39
79
[....]
77
28
55
Могу ли я рассчитывать на то, что вывод приведенного выше кода будет всегда одинаковым?
Если нет, что может изменить его?
Например, могут ли разные версии PHP давать разные результаты?
Или PHP работает на разных операционных системах?
Если я запускаю этот код в Windows, я получаю последовательность 99, 38, 79, 21, 75, 91, 42, 36, 47, 67. Он совместим со всеми версиями, 32-разрядными или 64-разрядными на моем компьютере с Windows ,
Принимая во внимание, что если я запускаю его на компьютере с Linux, я последовательно получаю последовательность 84, 39, 79, 80, 92, 19, 33, 77, 28, 55 независимо от того, какая версия PHP
Так что это не согласуется между операционными системами
Однако, если я использую mt_srand()
а также mt_rand()
вместо srand()
а также rand()
тогда я получаю согласованность между Windows / Linux и различными версиями PHP от 5.2 до 7.0
$seed = 1;
mt_srand( $seed );
for($i=0; $i<10; $i++)
{
echo mt_rand(0,100) . "\n";
}
exit(0);
последовательно дает 58, 0, 72, 94, 100, 87, 70, 100, 86, 76
Других решений пока нет …