Mt getrandmax: примеры (PHP)

Использование mt_getrandmax для работы с псевдослучайными числами
Раздел: Математические функции
mt_getrandmax: int

Описание функции mt_getrandmax

Функция mt_getrandmax() возвращает максимально возможное значение, которое может быть сгенерировано функцией mt_rand(). Это встроенная функция PHP, относящаяся к генерации псевдослучайных чисел с использованием алгоритма "Mersenne Twister".

Когда используется

Функция применяется, когда необходимо узнать верхний предел диапазона генерации для mt_rand(). Это полезно для нормализации сгенерированных чисел в определенный диапазон, проверки возможностей генератора или для отладки.

Аргументы функции

Функция mt_getrandmax() не принимает никаких параметров.

Базовые примеры использования

Получение максимального значения

Простой вызов функции для получения информации.

echo mt_getrandmax();
2147483647
Использование с mt_rand

Проверка генерации числа в полном диапазоне.

$max = mt_getrandmax();
echo "Максимум: ".$max."
"; echo "Случайное число: ".mt_rand(0, $max);
Максимум: 2147483647
Случайное число: 1870650196

Похожие функции в PHP

Возвращает максимально возможное значение для старого генератора rand(). Алгоритм менее качественный и медленнее, чем Mersenne Twister. В PHP 7.1.0 rand() стал псевдонимом для mt_rand().

random_int()

Генерирует криптографически безопасные псевдослучайные целые числа. Возвращает число в заданном диапазоне. Используется, когда важна безопасность, например, для генерации токенов или ключей.

Выбор функции

Для общих задач подходит mt_rand() (и, соответственно, mt_getrandmax()). Для задач, связанных с криптографией или безопасностью, необходимо использовать random_int().

Аналоги в других языках

Mt getrandmax в Python

В модуле random используется random.getrandbits() или константы random.RAND_MAX (в некоторых реализациях).

import random
import sys
# Максимальное значение для random.randint()
# Определяется через sys.maxsize или размер целого.
print(f"Максимальное int: {sys.maxsize}")
print(f"Случайное число: {random.randint(0, sys.maxsize)}")
Максимальное int: 9223372036854775807
Случайное число: 5467325748163754821

Mt getrandmax в Javascript

В JavaScript нет прямой аналогии. Метод Math.random() возвращает дробное число от 0 до 1. Максимальное целое значение можно получить через Number.MAX_SAFE_INTEGER.

console.log("Максимальное безопасное целое: " + Number.MAX_SAFE_INTEGER);
console.log("Случайное число от 0 до макс: " + Math.floor(Math.random() * Number.MAX_SAFE_INTEGER));
Максимальное безопасное целое: 9007199254740991
Случайное число от 0 до макс: 3177652146783456

Mt getrandmax в MySQL

Функция RAND() возвращает дробное число. Для получения целого в диапазоне используются вычисления. Максимальное значение зависит от контекста.

-- Максимальное значение для целого типа, например, BIGINT.
SELECT 9223372036854775807 AS max_bigint,
FLOOR(RAND() * 9223372036854775807) AS random_bigint;

Типичные ошибки

Неверное понимание возвращаемого значения

Значение mt_getrandmax() это максимальный аргумент для mt_rand(), а не максимальное возможное целое в PHP.

// Ошибка: попытка использовать значение для других целей.
$max = mt_getrandmax();
$result = $max + 1; // Может привести к переполнению на 32-битных системах.
echo $result;
Использование без mt_rand

Функция сама по себе бесполезна, её смысл только в связке с генератором.

// Бессмысленный код.
$max = mt_getrandmax();
// ... дальнейшие операции, не связанные с генерацией случайных чисел.

История изменений

В PHP 7.1.0 функции rand() и srand() были сделаны псевдонимами для mt_rand() и mt_srand() соответственно. Это сделало mt_getrandmax() более значимой, так как она стала определять максимум и для старой функции rand().

В PHP 8.0 значительных изменений в поведении функции не было. Алгоритм Mersenne Twister остался тем же.

Расширенные примеры

Генерация числа в процентном диапазоне

Создание случайного числа от 0 до 100% от максимального.

Пример php
$max = mt_getrandmax();
$percent = 50; // 50%
$limit = (int)($max * ($percent / 100));
$randomValue = mt_rand(0, $limit);
echo "Случайное значение (до $percent% от максимума): $randomValue";
Случайное значение (до 50% от максимума): 1073741823
Симуляция броска кубика с большим числом граней

Использование максимума для создания виртуальной кости.

Пример php
function rollDice($sides) {
    if ($sides < 2) return 1;
    $max = mt_getrandmax();
    // Равномерное распределение для любого числа граней.
    return mt_rand(1, $sides);
}
echo "Бросок d100: " . rollDice(100);
Бросок d100: 42
Проверка равномерности распределения (упрощенный вариант)
Пример php
$max = mt_getrandmax();
$buckets = [0, 0, 0, 0, 0]; // 5 корзин
$iterations = 10000;
for ($i = 0; $i < $iterations; $i++) {
    $num = mt_rand(0, $max);
    $bucket = (int)($num / ($max / 5)); // Делим диапазон на 5 частей
    if ($bucket >= 5) $bucket = 4; // На случай, если число равно максимуму
    $buckets[$bucket]++;
}
print_r($buckets);
Array
(
    [0] => 1982
    [1] => 2034
    [2] => 1987
    [3] => 2001
    [4] => 1996
)
Создание случайного пароля с использованием всего диапазона
Пример php
function generateRandomString($length) {
    $max = mt_getrandmax();
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charCount = strlen($chars);
    $result = '';
    for ($i = 0; $i < $length; $i++) {
        // Берем случайное число и берем остаток от деления на количество символов
        $randomIndex = mt_rand(0, $max) % $charCount;
        $result .= $chars[$randomIndex];
    }
    return $result;
}
echo "Пароль: " . generateRandomString(12);
Пароль: 7fH3pQ9aLm2K

PHP mt_getrandmax function comments

En
Mt getrandmax Show largest possible random value