W3docs

is_infinite()

Разбираем функцию is_infinite() в PHP: как она определяет бесконечные значения и где её применять.

Функция is_infinite() в PHP проверяет, является ли значение с плавающей точкой бесконечным — то есть равным INF (положительная бесконечность) или -INF (отрицательная бесконечность). На этой странице объясняется, что считается «бесконечным», как ведёт себя функция и в каких практических ситуациях она полезна.

Синтаксис и возвращаемое значение

is_infinite(float $num): bool
  • $num — проверяемое значение.
  • Возвращает true, если $num равно INF или -INF, и false для любого другого значения, включая обычные конечные числа и NAN (Not a Number).

is_infinite() имеет смысл только для вещественных чисел. Целые числа в PHP никогда не могут быть бесконечными, поэтому для них функция всегда возвращает false.

Откуда берутся бесконечные значения?

В PHP числа с плавающей точкой соответствуют стандарту IEEE 754, который предусматривает специальные значения для бесконечности. Значения INF или -INF появляются когда:

  • Используется предопределённая константа напрямую: $x = INF;
  • Вычисление выходит за диапазон типа float (примерно ±1.8e308): 1.0e308 * 10 превращается в INF.
  • Происходит деление на ноль в вещественной арифметике или функция вроде log(0) возвращает отрицательную бесконечность.

Поскольку эти значения незаметно распространяются в последующих вычислениях (INF + 1 по-прежнему INF), их проверка позволяет обнаружить расчёт, вышедший за допустимый диапазон.

Базовое использование

php— editable, runs on the server

Здесь мы присваиваем константу INF переменной $number, а затем вызываем is_infinite() для её проверки. Условие истинно, поэтому скрипт выводит The number is infinite.

Что является и что не является бесконечным

В таблице ниже показано, что именно возвращает is_infinite(). Обратите внимание: переполнение даёт INF, тогда как большое, но представимое число — нет:

<?php
var_dump(is_infinite(INF));               // bool(true)
var_dump(is_infinite(-INF));              // bool(true)
var_dump(is_infinite(PHP_FLOAT_MAX * 2)); // bool(true)  — overflow
var_dump(is_infinite(1 / 0.0001));        // bool(false) — large but finite
var_dump(is_infinite(42));                // bool(false) — an integer
var_dump(is_infinite(NAN));               // bool(false) — NAN is not infinite
?>

Важный момент: NAN (результат таких операций, как sqrt(-1)) не является бесконечным, поэтому is_infinite(NAN) возвращает false. Для обнаружения этого случая используйте is_nan(), а is_finite() — чтобы убедиться, что значение является обычным, пригодным к использованию числом.

Практический пример: защита от переполнения

Распространённый случай применения — проверка результата вычисления перед сохранением или отображением. Если операция привела к INF, код может отреагировать вместо того, чтобы передавать бесконечность дальше:

<?php
function guardedMultiply(float $a, float $b): string
{
    $product = $a * $b;

    return is_infinite($product)
        ? "Result overflowed to infinity"
        : "Result: $product";
}

echo guardedMultiply(1.0e200, 1.0e200), PHP_EOL; // Result overflowed to infinity
echo guardedMultiply(2, 3), PHP_EOL;             // Result: 6
?>

Умножение 1.0e200 на себя превышает диапазон float, поэтому произведение становится INF и защита срабатывает. Второй вызов возвращает обычное значение.

is_infinite() и связанные функции

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

  • is_infinite() — равно ли значение INF или -INF?
  • is_finite() — является ли значение обычным конечным числом (не INF, -INF и не NAN)?
  • is_nan() — равно ли значение NAN?
  • is_float() — имеет ли переменная тип float вообще?

Дополнительные числовые функции см. в справочнике по математике PHP.

Заключение

is_infinite() возвращает true только для INF и -INF, позволяя обнаруживать переполнение вещественных чисел и другие операции, дающие бесконечность. Используйте её вместе с is_finite() и is_nan() для полной проверки результата любого вычисления с плавающей точкой перед его использованием.

Практика

Практика
Какова цель функции 'is_infinite()' в PHP?
Какова цель функции 'is_infinite()' в PHP?
Was this page helpful?