PHP rand и mt_rand в чем разница? Генератор случайных чисел гсч

в языке РНР применяются два генератора случайных чисел (вызываемых соответственно с помощью функций rand() и mt_rand()). с каждым из этих генераторов связаны по три функции одинакового назначения: функция задания начального значения (srand() и mt_srand()), сама функция получения случайного числа и функция, осуществляющая выборку наибольшего целого числа, которое может быть возвращено генератором ((getrandmax() и mt_getrandmax())). функции getrandmax() и mt_getrandmax() возвращают значение наибольшего числа, которое может быть возвращено функцией rand() или mt_rand(). Значение зависит от вида и разрядности операционной системы.

Выбор конкретной функции выработки псевдослучайных чисел, которая используется в функции rand(), может зависеть от того, с какими именно библиотеками был откомпилирован интерпретатор РНР. В отличие от этого, в генераторе mt_rand() всегда используется одна и та же функция выработки псевдослучайных чисел (mt - сокращение от Mersenne Twister), причем автор оперативной документации к функции mt_rand() утверждает, что эта функция к тому же является более быстродействующей и «более случайной» (с точки зрения криптографии), чем rand().

При использовании некоторых версий РНР для отдельных платформ создается впечатление, что функции rand() и mt_rand() вырабатывают на первый взгляд вполне приемлемые случайные числа, даже без предварительного задания начального значения. Но такому впечатлению не следует доверять. Во-первых, программы, в которых используются функции выработки случайных чисел без задания начального значения, невозможно легко переносить на другие платформы, а, во-вторых, надежная работа указанных функций без задания начального значения не гарантируется. Типичный способ задания начального значения для любого из генераторов случайных чисел РНР (с использованием функции mt_srand() или srand()) заключается в следующем, в этом операторе задается начальное значение генератора, равное количеству микросекунд, истекших к данному времени с момента отсчета последней целой секунды. (Операция «Приведение типа» к типу float необходима, поскольку функция microtime() возвращает строку, которая рассматривается как целое число в операции умножения, но не в операции передачи параметров в функцию.)

mt_srand((float) (microtime 0 *1000000));
for ($i=0; $i<=10; $i++){
 echo mt_rand();
 echo "<br>";
}



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы