php — rand (), посеянная одинаково, дает разные результаты

Я разрабатываю приложение на PHP и C, но результат rand отличается между двумя языками, хотя я использую одно и то же семя:

PHP:

srand(1);
$random = rand(); // returns 32422

C:

srand(1);
int random = rand(); // returns 41

Почему это происходит?

0

Решение

Существует несколько способов реализации генератора псевдослучайных чисел.

Каждый язык программирования свободен в указании своего rand реализация, или даже ничего не указывать. Например, спецификация C говорит только, что rand Функция вычисляет последовательность псевдослучайных чисел в диапазоне от 0 до RAND_MAX«Там нет упоминания о том, как rand должно работать, так что авторы компилятора могут реализовать rand как им нравится.

Многие компиляторы используют линейный конгруэнтный генератор реализовать rand, Даже в этом простом алгоритме есть параметры, которые компилятор может задать самостоятельно и которые изменяют последовательность чисел, заданных конкретным начальным числом.

Параметры LCG

Посмотрите, как Borland и glibc используют разные параметры. Вы даже не можете доверять rand работать одинаково во всех программах на C, не говоря уже о всех программах в целом!

3

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

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

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