2015-12-05 6 views
2

Я генерации последовательности псевдослучайных чисел с этим кодом: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 работает на разных операционных системах?

+1

[Такому же семена тому же число] (https://3v4l.org/N2nCO) – Rizier123

+0

Не уверен, что, если 32 -бит/64-битный PHP даст вариацию –

+0

@MarkBaker Кажется, это не так: [32bit] (https://eval.in/480799) [64bit] (https://3v4l.org/X24sH) – Rizier123

ответ

3

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

+0

Предупреждение, если память правильная, это НЕ согласованы в разных версиях php. – hanshenrik

+0

да, Выход для 5.2.1 - 7.0.0: 580729410087701008676 Выход для 4.3.0 - 5.2.0: 89985189699593497888 - http://3v4l.org – hanshenrik

+1

Конечно, если кто-нибудь еще использует PHP <= 5.2.0, тогда они действительно должны быть отклонены, по крайней мере, до поддерживаемой версии. –

 Смежные вопросы

  • Нет связанных вопросов^_^