random — PHP: всегда ли псевдогенерируемые числа rand () всегда одинаковы для заданного начального числа?

Я генерирую последовательность псевдослучайных чисел с помощью этого кода:

$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 работает на разных операционных системах?

2

Решение

Если я запускаю этот код в 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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]