Я разрабатываю приложение на PHP и C, но результат rand
отличается между двумя языками, хотя я использую одно и то же семя:
PHP:
srand(1);
$random = rand(); // returns 32422
C:
srand(1);
int random = rand(); // returns 41
Почему это происходит?
Существует несколько способов реализации генератора псевдослучайных чисел.
Каждый язык программирования свободен в указании своего rand
реализация, или даже ничего не указывать. Например, спецификация C говорит только, что rand
Функция вычисляет последовательность псевдослучайных чисел в диапазоне от 0 до RAND_MAX
«Там нет упоминания о том, как rand
должно работать, так что авторы компилятора могут реализовать rand
как им нравится.
Многие компиляторы используют линейный конгруэнтный генератор реализовать rand
, Даже в этом простом алгоритме есть параметры, которые компилятор может задать самостоятельно и которые изменяют последовательность чисел, заданных конкретным начальным числом.
Посмотрите, как Borland и glibc используют разные параметры. Вы даже не можете доверять rand
работать одинаково во всех программах на C, не говоря уже о всех программах в целом!
Других решений пока нет …