Генерация натурального числа из PHP lcg_value ()? - PullRequest
1 голос
/ 13 ноября 2010

Я хочу получить натуральное число (положительное целое число от 0 до x), используя lcg_value () . Это то, что я вижу из фактического исходного кода функции:

/*
 * combinedLCG() returns a pseudo random number in the range of (0, 1).
 * The function combines two CGs with periods of
 * 2^31 - 85 and 2^31 - 249. The period of this function
 * is equal to the product of both primes.
 */

Теперь, как бы мне превратить это число в натуральное число, чтобы я не терял информацию / энтропию. В настоящее время я просто делаю это так:

$number = pow(2,31) * lcg_value();

Однако у меня ощущение, что оно не идеальное. Как насчет 2 ^ 62? Или, возможно, 2 ^ 31-334? Или 2 ^ 62-334? Я не знаю.

1 Ответ

1 голос
/ 13 ноября 2010

либо тип float, либо int ограничены платформой

Integer Размер целого зависит от платформы, хотя максимальное значение около двух миллиардов составляетобычное значение (это 32 бита со знаком).64-битные платформы обычно имеют максимальное значение около 9E18.PHP не поддерживает целые числа без знака.Целочисленный размер может быть определен с использованием константы PHP_INT_SIZE, а максимальное значение - с использованием константы PHP_INT_MAX, начиная с PHP 4.4.0 и PHP 5.0.5.

float Размер плавающего элемента зависит от платформыхотя максимум ~ 1.8e308 с точностью примерно 14 десятичных цифр является общим значением (формат 64-битного IEEE).

для поддержания максимальной точности с плавающей точкой, вы можете сослаться http://www.php.net/manual/en/function.bcmul.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...