Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11149 глав4458 карточек справочника
Дерево руководства

Глава 77 · От первых шагов к справочнику

Математика: полный справочник функций Math

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

От нужного результата к вызову функции

Наглядная модель

Распределить 103 товара по коробкам

Целая часть и остаток отвечают на разные вопросы.

  1. 103 товара

    В одной коробке помещается 10 товаров.

  2. intdiv(103, 10) → 10

    Количество полностью заполненных коробок.

  3. 103 % 10 → 3

    Товары, для которых нужна ещё одна коробка.

  4. 10 + 1 → 11 коробок

    Это решение задачи размещения, а не округление суммы денег.

Делитель должен быть положительным. Для денежных величин отдельно выбирают единицы, точность и правила округления.

Сервису надо посчитать коробки, показать показание датчика, построить точку графика или прочитать hex-код. Нужны разные операции: «два полных пакета», «три пакета с неполным» и «2.4 в отчёте» — разные полезные результаты. Эта глава связывает каждую функцию официальной категории Math с её договором и проверяемым опытом.

Минимальная запись: $boxes = ceil(25 / 12);. $boxes — имя переменной; = сохраняет значение справа; 25 / 12 сначала вычисляет отношение; ceil(...) получает это число и возвращает округлённое; ; завершает команду. echo выводит текст, var_dump показывает ещё и тип значения, "\n" переносит строку. Первое знакомство с переменной и как читается вызов.

От заказа к числу коробок
  1. 25 деталей; коробка на 12 деталей
  2. 25 / 12 даёт дробное число чуть больше 2
  3. ceil выбирает 3.0; echo показывает 3
  4. Вместимость трёх коробок достаточна для всего заказа
Первый полезный расчётСамостоятельный пример
<?php
$boxes = ceil(25 / 12);
echo $boxes, " boxes\n";
var_dump($boxes);
Ожидаемый результат
3 boxes
float(3)

Число целое по значению, но тип float. var_dump показывает тип. echo выводит строку пользователю; сам расчёт не меняет заказ и не резервирует коробки.

ОбозначениеКак читать
intМашинное целое ограниченной разрядности.
floatДвоичное приближение числа; может содержать INF/NAN.
stringТекст записи: например "ff".
boolОтвет true/false.
int|floatРазрешён один из перечисленных типов, символ | здесь часть описания типа.
mixedТип заранее не ограничен сигнатурой; правила операции и сравнения всё равно действуют.

Это встроенная категория стандартного PHP, отдельный пакет Composer для обычных функций не нужен. Однако наличие конкретной функции зависит от версии: fpow и RoundingMode появились в 8.4, clamp — в 8.6. Проверочные запуски этой партии выполнены на PHP 8.5.11, поэтому примеры настоящего clamp помечены фрагментами. PHP.net не содержит в текущей ветке book.math отдельных страниц установки или конфигурации: дополнительные несуществующие узлы не создаются.

Полный список функций по задаче

Список ниже охватывает все 45 функций текущей официальной ветки ref.math. Карточка раскрывает параметры, результат, версии, ошибки и примеры. Это полнота данной категории, а не всех математических расширений PHP.

Нужно сделатьКарточки
Округление и границыabs, ceil, floor, round, min, max, clamp
Деление и остатокintdiv, fdiv, fmod
Степени, корни, логарифмыpow, fpow, sqrt, hypot, exp, expm1, log, log10, log1p
Угол и окружностьpi, deg2rad, rad2deg, sin, cos, tan, asin, acos, atan, atan2
Гиперболические преобразованияsinh, cosh, tanh, asinh, acosh, atanh
Системы счисленияbase_convert, bindec, hexdec, octdec, decbin, dechex, decoct
Особые численные результатыis_finite, is_infinite, is_nan

Отдельно: RoundingMode. Арифметические операторы и типы int/float объясняют базу. BCMath, GMP, случайные числа и другие официальные категории разрабатываются своими ветками; Math не подменяет их.

Точность, деньги, форматирование и разрядность

float хранит число в двоичном формате ограниченной точности. Например, 0.1 не представимо в нём точно. Форматирование с двумя знаками скрывает лишние разряды вывода, но не меняет модель вычисления. Для количества копеек удобен int с проверкой диапазона; для произвольной десятичной точности — BCMath или соответствующая библиотека с явной политикой округления.

Одна сумма — разные представления
  1. 0.1 и 0.2 хранятся приближённо
  2. Сложение даёт близкий к 0.3 float
  3. Прямое === может быть false
  4. 10 и 20 целых минимальных единиц дают ровно 30, пока int не переполнен
Численная погрешность и целые единицыСамостоятельный пример
<?php
var_dump(0.1 + 0.2 === 0.3);
echo 10 + 20, " minor units\n";
$measured = 0.1 + 0.2;
var_dump(abs($measured - 0.3) <= 0.000001);
Ожидаемый результат
bool(false)
30 minor units
bool(true)

Допуск в последней строке выбран для учебного измерения. Для денег нельзя просто добавить «маленькое число»: сначала нужен точный тип и договор округления.

Для измерений допуск зависит от единиц и масштаба. Числа после number_format имеют тип string и могут содержать запятые/разделители — не подавайте такой текст обратно в арифметику. Границы int зависят от сборки: PHP_INT_MIN, PHP_INT_MAX, PHP_INT_SIZE. Математика этой категории ограничена int/float; большие целые хранят/обрабатывают отдельно. Перед сменой версии PHP прогоните сохранённые пограничные входы своего расчёта: особенно произведения около половины шага округления. Проверка только отображаемого текста может скрыть отличие внутреннего float.

Все константы официальной категории

Константа — готовое именованное значение; перед именем нет $, после нет (). Все значения M_* ниже имеют тип float и являются приближениями. Четыре PHP_ROUND_HALF_* имеют тип int и выбирают режим, а не являются числами для формулы. Константы этой страницы всегда доступны в ядре PHP.

ИмяНазначение
M_PIπ ≈ 3.14159; окружность
M_Ee ≈ 2.71828; натуральная экспонента
M_LOG2Elog₂(e) ≈ 1.44270
M_LOG10Elog₁₀(e) ≈ 0.43429
M_LN2ln(2) ≈ 0.69315
M_LN10ln(10) ≈ 2.30259
M_PI_2π/2 ≈ 1.57080; четверть оборота
M_PI_4π/4 ≈ 0.78540; 45°
M_1_PI1/π ≈ 0.31831
M_2_PI2/π ≈ 0.63662
M_SQRTPI√π ≈ 1.77245
M_2_SQRTPI2/√π ≈ 1.12838
M_SQRT2√2 ≈ 1.41421
M_SQRT3√3 ≈ 1.73205
M_SQRT1_21/√2 ≈ 0.70711
M_LNPIln(π) ≈ 1.14473
M_EULERпостоянная Эйлера — Маскерони γ ≈ 0.57722; это не M_E
NANfloat: неопределённый или не представимый действительным числом результат
INFfloat: положительная бесконечность; отрицательная записывается −INF
PHP_ROUND_HALF_UPint: половина от нуля
PHP_ROUND_HALF_DOWNint: половина к нулю
PHP_ROUND_HALF_EVENint: половина к чётному
PHP_ROUND_HALF_ODDint: половина к нечётному
Размеры круга
  1. Радиус 3
  2. M_PI × 3 × 3
  3. Приблизительная площадь 28.274 квадратных единиц
Константы в формулеСамостоятельный пример
<?php
printf("%.3f\n", M_PI * 3 * 3);
printf("%.3f\n", 10 * M_SQRT2);
var_dump(is_nan(NAN), is_infinite(INF));
Ожидаемый результат
28.274
14.142
bool(true)
bool(true)

printf с %.3f показывает три дробных знака. Второе число — диагональ квадрата со стороной 10. NAN и INF нельзя путать с текстом в кавычках.

С PHP 8.4 официальный справочник рекомендует именованные варианты RoundingMode вместо старых int-режимов. Старые четыре константы остаются полезны для совместимости PHP 8.2/8.3. M_EULER — γ, другая постоянная, чем M_E = e.

Выбор политики: ошибка, NAN, INF или отсутствие результата

Не все математические неудачи бросают исключение. Тип результата нужно связать с поведением сервиса: показать ошибку исходных данных, пропустить измерение с записью причины или отметить «недоступно». Не превращайте любую проблему в ноль: ноль может быть настоящим измерением.

СитуацияПоведение / выбор
intdiv(1,0) / оператор 1/0Ошибка деления на ноль; проверка или конкретный catch.
fdiv(1,0)INF; is_finite перед сохранением/JSON.
sqrt(-1), fmod(1,0)NAN; is_nan или предварительная проверка области.
min([]), max([])ValueError; отдельно обработать пустую выборку.
round(..., mode:99), PHP 8.4+ValueError; неверная настройка, не нулевой результат.
log(0)−INF; ноль не помещается на обычную логарифмическую ось.
pow(0,-1), PHP 8.4+Устаревшее поведение; fpow либо явная проверка нуля.
clamp, PHP 8.6+NAN у value сохраняется; NAN у границы или min > max — ValueError.

К обработке исключений переходят после определения политики. JSON-ответ не может хранить INF/NAN как обычные JSON-числа.

Единицы, объём работы и разумные альтернативы

Для одной пары машинных чисел эти функции выполняют ограниченное вычисление; разница между миллионами вызовов и одним вызовом важнее названия функции. Не приписываем точное ускорение без замера на своей сборке. min/max обходят переданный набор: ради одного экстремума не нужно сначала сортировать всё. Конверсия очень длинной строки требует обработки её символов и не становится точной оттого, что строка длинная.

ЗадачаВыбор и ограничение
Целые партии/страницыintdiv и %; отдельно учитывать неполную партию.
Видимый денежный текстХранение/расчёт отдельно; number_format только на выходе.
Малые измененияlog1p и expm1 уменьшают потерю значимости в соответствующих формулах.
Расстояние на планеhypot(dx,dy), общие единицы; не широта/долгота как метры.
Угол интерфейсаdeg2rad перед sin/cos/tan, rad2deg после обратных функций.
Огромный ID/хешСтрока или точные большие целые; base_convert не шифрует и может потерять точность.

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

Самостоятельная задача: пакеты без потери остатка

Задача: 49 заявок нужно разложить по пачкам не больше 12. Верните полные пачки, остаток и количество всех пачек. Требования: количество неотрицательное, размер пачки положительный; числа заранее проверены и помещаются в int. Сначала попробуйте сами, затем сравните договор и результат.

Учёт последней пачки
  1. 49 заявок, по 12
  2. intdiv → 4 полных; % → остаток 1
  3. Остаток не нулевой: нужна ещё 1 пачка
  4. Всего 5, данные не теряются
Решение и проверка граничных случаевСамостоятельный пример
<?php
function batchCount($count, $size) {
    if ($count < 0 || $size <= 0) {
        throw new InvalidArgumentException('invalid quantity');
    }
    $full = intdiv($count, $size);
    $remaining = $count % $size;
    return $full + (int) ($remaining !== 0);
}
echo intdiv(49, 12), ' full; ', 49 % 12, " remain\n";
echo batchCount(49, 12), " batches\n";
echo batchCount(48, 12), " batches\n";
echo batchCount(0, 12), " batches\n";
Ожидаемый результат
4 full; 1 remain
5 batches
4 batches
0 batches

(int) превращает bool «есть остаток» в 1 или 0. Здесь избежали промежуточного count + size − 1, который может переполнить int. Следующий шаг — добавить проверку целого количества из формы, а не передавать строку HTTP напрямую.

Усложнение: вывести угол от склада до точки доставки на плоском плане; сравнить первые две карточки hypot и atan2. Для границ графика проверьте is_finite.

Функции и методы этой темы

Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.

absИзменение остатка может быть отрицательным; abs даёт величину изменения без направления.

PHP 4+ · standard

abs(int|float $num): int|float

Изменение остатка может быть отрицательным; abs даёт величину изменения без направления.

Перед первым опытом: запись abs(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numПоложительное, отрицательное число или ноль.
ВозвратМодуль: float сохраняет тип float; обычный int даёт int. Особый случай PHP_INT_MIN даёт float: положительная величина не помещается в int.
Ошибки и границыНе проверяет допустимость измерения. NAN остаётся NAN, модуль ±INF — INF. С PHP 8 численно преобразуемые внутренние объекты не принимаются.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

Обозначения последующих шагов: условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Склад: было 18, стало 13
  2. Разность 13 − 18 = −5
  3. abs(-5) возвращает 5; направление нужно хранить отдельно
Величина изменения складаСамостоятельный пример
<?php
$change = 13 - 18;
echo abs($change), "\n";
var_dump(abs(-2.5));
Ожидаемый результат
5
float(2.5)

Первая величина целая; вторая дробная. abs не говорит, было списание или поступление.

Допуск датчика и нижняя граница intСамостоятельный пример
<?php
$expected = 20.0;
$actual = 20.03;
echo abs($actual - $expected) <= 0.05 ? "within tolerance\n" : "inspect\n";
var_dump(is_float(abs(PHP_INT_MIN)));
Ожидаемый результат
within tolerance
bool(true)

Допуск 0.05 задан условиями измерения. Не переносите произвольный допуск в бухгалтерские суммы.

Когда подходит и где остановиться. Модуль пригоден для расстояния между двумя скалярными измерениями. Для двух координат используйте hypot. abs не устраняет накопленную погрешность и не заменяет проверку is_finite.

Сравните: hypot, is_finite. Выбор по задаче.

ceilЧтобы разместить все товары, неполную коробку тоже нужно учесть. ceil округляет вверх.

PHP 4+ · standard

ceil(int|float $num): float

Чтобы разместить все товары, неполную коробку тоже нужно учесть. ceil округляет вверх.

Перед первым опытом: запись ceil(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numОкругляемое число; знак имеет значение.
ВозвратЦелое по значению, но тип float; округление в сторону +∞. Уже целое значение не меняется.
Ошибки и границыNAN и бесконечности не превращаются в обычный int. С PHP 8 внутренний объект с численным преобразованием не принимается.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат. Условия и обход списка.

Путь данных в первом примере
  1. Отношение 2.2 коробки
  2. ceil выбирает ближайшее целое в сторону +∞
  3. 3.0; неполная коробка включена
Увидеть направление на числах обоих знаковСамостоятельный пример
<?php
var_dump(ceil(2.2));
var_dump(ceil(-2.2));
Ожидаемый результат
float(3)
float(-2)

Для отрицательных чисел «вверх» означает ближе к нулю, «вниз» — дальше. Это не округление к ближайшему.

Рассчитать упаковкиСамостоятельный пример
<?php
function boxesNeeded($pieces, $capacity) {
    return (int) ceil($pieces / $capacity);
}
echo boxesNeeded(25, 12), "\n";
echo boxesNeeded(24, 12), "\n";
Ожидаемый результат
3
2

Функция применяется к заранее проверенным небольшим неотрицательным значениям и положительному делителю. (int) здесь допустим, поскольку результат заведомо помещается в int; это не универсальное преобразование любого float.

Когда подходит и где остановиться. Деление на ноль нужно отклонять до вызова. Десятичное произведение вроде суммы × 100 может оказаться чуть ниже ожидаемого целого; floor тогда честно выберет предыдущее. Для точных денег используйте целые минимальные единицы либо десятичную арифметику. Для целых количеств рассмотрите intdiv и остаток.

Сравните: floor, round, intdiv. Выбор по задаче.

floorЧтобы узнать число полностью заполненных ёмкостей, floor округляет вниз.

PHP 4+ · standard

floor(int|float $num): float

Чтобы узнать число полностью заполненных ёмкостей, floor округляет вниз.

Перед первым опытом: запись floor(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numОкругляемое число; знак имеет значение.
ВозвратЦелое по значению, но тип float; округление в сторону −∞. Уже целое значение не меняется.
Ошибки и границыNAN и бесконечности не превращаются в обычный int. С PHP 8 внутренний объект с численным преобразованием не принимается.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат. Условия и обход списка.

Путь данных в первом примере
  1. Объём 2.8 полных порций
  2. floor выбирает ближайшее целое в сторону −∞
  3. 2.0; неполная порция не включена
Увидеть направление на числах обоих знаковСамостоятельный пример
<?php
var_dump(floor(2.8));
var_dump(floor(-2.2));
Ожидаемый результат
float(2)
float(-3)

Для отрицательных чисел «вверх» означает ближе к нулю, «вниз» — дальше. Это не округление к ближайшему.

Разделить доступную длинуСамостоятельный пример
<?php
function fullSegments($meters, $segmentMeters) {
    return (int) floor($meters / $segmentMeters);
}
echo fullSegments(7.5, 2.0), "\n";
echo fullSegments(8.0, 2.0), "\n";
Ожидаемый результат
3
4

Функция применяется к заранее проверенным небольшим неотрицательным значениям и положительному делителю. (int) здесь допустим, поскольку результат заведомо помещается в int; это не универсальное преобразование любого float.

Когда подходит и где остановиться. Деление на ноль нужно отклонять до вызова. Десятичное произведение вроде суммы × 100 может оказаться чуть ниже ожидаемого целого; floor тогда честно выберет предыдущее. Для точных денег используйте целые минимальные единицы либо десятичную арифметику. Для целых количеств рассмотрите intdiv и остаток.

Сравните: ceil, round, intdiv. Выбор по задаче.

fdivВ численной обработке можно сохранить бесконечный или неопределённый результат деления, а затем явно выбрать, что показать пользователю.

PHP 8+ · standard

fdiv(float $num1, float $num2): float

В численной обработке можно сохранить бесконечный или неопределённый результат деления, а затем явно выбрать, что показать пользователю.

Перед первым опытом: запись fdiv(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
num1Числитель.
num2Знаменатель, допускает в том числе 0.0 и −0.0.
Возвратfloat по IEEE 754: обычное частное либо INF, −INF, NAN.
Ошибки и границыНулевой знаменатель не бросает DivisionByZeroError: ненулевой числитель даёт бесконечность с учётом знаков; 0/0 даёт NAN. Несовместимый тип: TypeError.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. 12 обработанных строк за 4 секунды
  2. fdiv(12, 4) вычисляет отношение
  3. 3.0 строки/сек; результат ещё надо проверить
Обычное отношение и особые результатыСамостоятельный пример
<?php
var_dump(fdiv(12, 4));
var_dump(fdiv(1, 0), fdiv(-1, 0), fdiv(0, 0));
Ожидаемый результат
float(3)
float(INF)
float(-INF)
float(NAN)

INF — значение float, а не строка. NAN проверяют is_nan, сравнение с самим NAN не работает.

Не отправлять бесконечность в отчётСамостоятельный пример
<?php
function rateLabel($processed, $seconds) {
    $rate = fdiv($processed, $seconds);
    if (!is_finite($rate)) { return 'unavailable'; }
    return number_format($rate, 1, '.', '') . ' rows/s';
}
echo rateLabel(12, 4), "\n";
echo rateLabel(12, 0), "\n";
Ожидаемый результат
3.0 rows/s
unavailable

В этой модели отсутствие длительности даёт unavailable. Для обычного бизнес-расчёта можно вместо fdiv заранее потребовать положительный знаменатель.

Когда подходит и где остановиться. Это выбор политики вычисления, а не универсальное исправление деления на ноль. Оператор / на нуле бросает ошибку в PHP 8. JSON не представляет INF/NAN; определите состояние отсутствующих данных перед сериализацией.

Сравните: intdiv, fmod, is_finite. Выбор по задаче.

fmodПолучите оставшуюся часть дробной величины: например, остаток длины после нарезки равных кусков.

PHP 4.2+ · standard

fmod(float $num1, float $num2): float

Получите оставшуюся часть дробной величины: например, остаток длины после нарезки равных кусков.

Перед первым опытом: запись fmod(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
num1Делимое.
num2Делитель; для полезного остатка нужен ненулевой.
ВозвратОстаток r в num1 = целое * num2 + r. Для конечных значений и ненулевого делителя |r| < |num2|; ненулевой остаток имеет знак делимого.
Ошибки и границыНулевой делитель даёт NAN, не DivisionByZeroError. INF в делимом также может дать NAN; проверяйте конечность входа.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Лента 7.5 м; кусок 2 м
  2. Три куска используют 6 м
  3. fmod(7.5, 2) возвращает остаток 1.5 м
Дробный остаток и его знакСамостоятельный пример
<?php
echo fmod(7.5, 2), "\n";
echo fmod(-7.5, 2), "\n";
var_dump(is_nan(fmod(7.5, 0)));
Ожидаемый результат
1.5
-1.5
bool(true)

% сначала работает с int и не подходит для этой длины. fmod не означает всегда неотрицательный математический модуль.

Нормализовать отрицательный уголСамостоятельный пример
<?php
function normalizedAngle($degrees) {
    $remainder = fmod($degrees, 360.0);
    return $remainder < 0 ? $remainder + 360.0 : $remainder;
}
echo normalizedAngle(-22.5), "\n";
echo normalizedAngle(742.5), "\n";
Ожидаемый результат
337.5
22.5

Вход этой функции — уже проверенный конечный угол. Одно прибавление 360 выполняется после остатка, а не к произвольному входу.

Когда подходит и где остановиться. fmod(2.0, 0.1) может выглядеть как 0.1: в памяти 0.1 является приближением. Поэтому «остаток равен нулю» не доказывает десятичную кратность; для шага в копейках используйте целые единицы. Масштабный допуск для измерений должен вытекать из задачи.

Сравните: intdiv, fdiv, floor. Выбор по задаче.

maxВыберите наибольшее время обработки из отчёта без сортировки всего списка.

PHP 4+ · standard

max(mixed $value, mixed ...$values): mixed; max(array $value_array): mixed

Выберите наибольшее время обработки из отчёта без сортировки всего списка.

Перед первым опытом: запись max(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
value, ...valuesДва или более отдельных сравнимых значения. ... в сигнатуре означает произвольное количество аргументов.
value_arrayАльтернативная форма: один непустой массив; сравниваются значения, ключ результата не возвращается. Документированная массивная форма позиционная.
ВозвратИсходное значение наибольшее, с сохранением типа. PHP.net описывает возврат первого из равных.
Ошибки и границыПустой массив: ValueError с PHP 8 (раньше warning и false). Одиночный скаляр не заменяет массив: TypeError; отсутствие аргументов — ArgumentCountError.

Используются обычные min / правила сравнения PHP, а не специальное числовое преобразование всех значений. В PHP 8 число при сравнении с нечисловой строкой превращается в строку; до PHP 8 нечисловая строка превращалась в число. Bool/null и массивы имеют свои правила — приводите данные отчёта к одному смысловому типу.

В опытах с отказом try выполняет попытку, catch ловит указанный тип ошибки; как работает обработка исключений.

Путь данных в первом примере
  1. Измерения 180, 240, 210 мс
  2. max просматривает значения и выбирает наибольшее
  3. 240 мс — максимум
Аргументы или готовый списокСамостоятельный пример
<?php
echo max(180, 240, 210), "\n";
echo max([180, 240, 210]), "\n";
Ожидаемый результат
240
240

Список не сортируется и не изменяется. Для большого списка это выбор экстремума, а не подготовка ранжирования.

Пустой отчёт и равные значения разных типовСамостоятельный пример
<?php
try { max([]); }
catch (ValueError $error) { echo "no measurements\n"; }
var_dump(max([0, false]));
var_dump(max([false, 0]));
Ожидаемый результат
no measurements
int(0)
bool(false)

При равенстве возвращён первый аргумент. Поэтому результат нельзя автоматически считать int, если вход неоднороден.

Когда подходит и где остановиться. Сравнение массивов не ищет максимум по колонке: сначала выделите нужные числа. Если нужно вернуть заказ с максимальной суммой, сохраняйте вместе число и запись при обходе. Для массивов PHP сперва учитывает размер, затем пары ключ/значение; для bool действует логическое преобразование. NAN не следует использовать в наборе кандидатов. Сортировка всего массива ради одного экстремума обычно делает ненужную работу, точное время измеряют на своём объёме.

Сравните: min, is_finite, clamp. Выбор по задаче.

minВыберите наименьшее время обработки из отчёта без сортировки всего списка.

PHP 4+ · standard

min(mixed $value, mixed ...$values): mixed; min(array $value_array): mixed

Выберите наименьшее время обработки из отчёта без сортировки всего списка.

Перед первым опытом: запись min(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
value, ...valuesДва или более отдельных сравнимых значения. ... в сигнатуре означает произвольное количество аргументов.
value_arrayАльтернативная форма: один непустой массив; сравниваются значения, ключ результата не возвращается. Документированная массивная форма позиционная.
ВозвратИсходное значение наименьшее, с сохранением типа. PHP.net описывает возврат первого из равных. Для min есть оговорённый ниже край прямого вызова на PHP 8.5.11.
Ошибки и границыПустой массив: ValueError с PHP 8 (раньше warning и false). Одиночный скаляр не заменяет массив: TypeError; отсутствие аргументов — ArgumentCountError.

Используются обычные max / правила сравнения PHP, а не специальное числовое преобразование всех значений. В PHP 8 число при сравнении с нечисловой строкой превращается в строку; до PHP 8 нечисловая строка превращалась в число. Bool/null и массивы имеют свои правила — приводите данные отчёта к одному смысловому типу.

В опытах с отказом try выполняет попытку, catch ловит указанный тип ошибки; как работает обработка исключений.

Путь данных в первом примере
  1. Измерения 180, 240, 210 мс
  2. min просматривает значения и выбирает наименьшее
  3. 180 мс — минимум
Аргументы или готовый списокСамостоятельный пример
<?php
echo min(180, 240, 210), "\n";
echo min([180, 240, 210]), "\n";
Ожидаемый результат
180
180

Список не сортируется и не изменяется. Для большого списка это выбор экстремума, а не подготовка ранжирования.

Пустой отчёт и равные значения разных типовСамостоятельный пример
<?php
try { min([]); }
catch (ValueError $error) { echo "no measurements\n"; }
var_dump(min([0, false]));
var_dump(min([false, 0]));
Ожидаемый результат
no measurements
int(0)
bool(false)

При равенстве возвращён первый аргумент. Поэтому результат нельзя автоматически считать int, если вход неоднороден.

Когда подходит и где остановиться. Сравнение массивов не ищет максимум по колонке: сначала выделите нужные числа. Если нужно вернуть заказ с максимальной суммой, сохраняйте вместе число и запись при обходе. Для массивов PHP сперва учитывает размер, затем пары ключ/значение; для bool действует логическое преобразование. NAN не следует использовать в наборе кандидатов. Сортировка всего массива ради одного экстремума обычно делает ненужную работу, точное время измеряют на своём объёме. Граница переносимости: на проверенном PHP 8.5.11 прямой вызов min(0, false) возвращает false, а min([0, false]) и вызов через распаковку списка возвращают 0. Не используйте неоднородные равные значения как способ стабильно выбрать тип результата; это расхождение с общей формулировкой документации воспроизведено отдельно.

Сравните: max, is_finite, clamp. Выбор по задаче.

clampОграничьте величину допустимым диапазоном: яркость ниже 0 станет 0, выше 100 станет 100.

PHP 8.6+; встроенная функция отсутствует в проверочном PHP 8.5.11 · standard

clamp(mixed $value, mixed $min, mixed $max): mixed

Ограничьте величину допустимым диапазоном: яркость ниже 0 станет 0, выше 100 станет 100.

Перед первым опытом: запись clamp(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
valueСравнимое значение, которое ограничивают.
minНижняя включительная граница.
maxВерхняя включительная граница, не меньше min.
ВозвратВозвращается value внутри диапазона, иначе ближайшая граница. Возвращённый аргумент сохраняет исходный тип. NAN в value возвращается как NAN.
Ошибки и границыValueError, если min > max либо любая граница NAN. Смешанные типы используют обычные правила сравнения PHP; это не проверка формы.

Ниже два фрагмента для PHP 8.6, они не запускались на PHP 8.5.11. Затем — два проверяемых числовых решения для PHP 8.2+. Не определяем собственную глобальную функцию clamp: после обновления она конфликтовала бы со встроенной.

В опытах с отказом try выполняет попытку, catch ловит указанный тип ошибки; как работает обработка исключений.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. Настройка яркости −12; допустимо 0…100
  2. clamp сравнивает с нижней границей 0
  3. Возвращает 0; тип возвращённой границы сохранён
PHP 8.6: яркость в пределахФрагмент или команда
<?php
echo clamp(-12, 0, 100), "\n";
echo clamp(42, 0, 100), "\n";
echo clamp(115, 0, 100), "\n";
Ожидаемый результат
0
42
100

Контекстный фрагмент, требует PHP 8.6. Выход указан по документированному контракту, не как свидетельство запуска.

PHP 8.6: границы и особое значениеФрагмент или команда
<?php
try { clamp(4, 10, 2); }
catch (ValueError $error) { echo "reversed bounds\n"; }
try { clamp(4, NAN, 10); }
catch (ValueError $error) { echo "invalid bound\n"; }
var_dump(is_nan(clamp(NAN, 0, 10)));
Ожидаемый результат
reversed bounds
invalid bound
bool(true)

Тоже фрагмент для 8.6, без заявления о проверке на нашем runtime.

PHP 8.2+: фиксированный числовой диапазонСамостоятельный пример
<?php
$brightness = -12;
echo max(0, min(100, $brightness)), "\n";
$brightness = 115;
echo max(0, min(100, $brightness)), "\n";
Ожидаемый результат
0
100

Альтернатива только для уже проверенных конечных чисел и правильных фиксированных границ; это не полный полифил mixed/NAN контракта.

Настраиваемый диапазон с явным отказомСамостоятельный пример
<?php
function boundedNumber($value, $lower, $upper) {
    if (!is_finite($value) || !is_finite($lower) || !is_finite($upper) || $lower > $upper) {
        throw new InvalidArgumentException('invalid range');
    }
    return max($lower, min($upper, $value));
}
echo boundedNumber(42, 0, 100), "\n";
try { boundedNumber(4, 10, 2); }
catch (InvalidArgumentException $error) { echo "invalid range\n"; }
Ожидаемый результат
42
invalid range

В собственной функции договор намеренно уже: передаются только числа, NAN/INF отклоняются. Строки HTTP должны быть отдельно проверены до этого вызова.

Когда подходит и где остановиться. Не маскируйте ошибку заказа автоматическим уменьшением количества: иногда нужно сообщить «нет такого остатка». Ограничение подходит настройке интерфейса или численной модели, если эта политика согласована. Для нескольких типов нет обещания числового порядка.

Сравните: min, max, is_finite. Выбор по задаче.

is_finiteПеред сохранением измерения убедитесь, что оно не NAN и не бесконечность.

PHP 4.2+ · standard

is_finite(float $num): bool

Перед сохранением измерения убедитесь, что оно не NAN и не бесконечность.

Перед первым опытом: запись is_finite(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numЧисленное значение float (int также допустим); не произвольный пользовательский текст.
Возвратtrue, если значение конечное; иначе false.
Ошибки и границыНеподходящий тип может дать TypeError. Функция не исправляет данные и не проверяет бизнес-диапазон.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

Обозначения последующих шагов: foreach ($list as $value) последовательно берёт элементы списка; [a, b] создаёт список; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. Проверяем 12.5, INF, −INF, NAN
  2. is_finite классифицирует каждое численное значение
  3. Возвращает bool; приложение выбирает действие
Четыре класса численных значенийСамостоятельный пример
<?php
var_dump(is_finite(12.5), is_finite(INF), is_finite(-INF), is_finite(NAN));
Ожидаемый результат
bool(true)
bool(false)
bool(false)
bool(false)

INF и NAN написаны без кавычек: это специальные константы float.

Политика для результата расчётаСамостоятельный пример
<?php
$readings = [12.5, INF, NAN, 13.0];
$accepted = [];
foreach ($readings as $reading) {
    if (is_finite($reading)) { $accepted[] = $reading; }
}
echo count($accepted), " valid readings\n";
Ожидаемый результат
2 valid readings

Массив содержит уже численные результаты, не произвольные строки формы. Отклонённые показания в настоящем сервисе отдельно протоколируют.

Когда подходит и где остановиться. is_nan не является отрицанием is_numeric; is_infinite не ловит NAN; is_finite не проверяет положительность или единицы измерения. Сначала подтвердите тип, затем конечность, затем допустимый диапазон. Для NAN не пользуйтесь == или ===.

Сравните: is_infinite, is_nan. Выбор по задаче.

is_infiniteОтдельно распознайте переполнение расчёта или бесконечность от деления.

PHP 4.2+ · standard

is_infinite(float $num): bool

Отдельно распознайте переполнение расчёта или бесконечность от деления.

Перед первым опытом: запись is_infinite(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numЧисленное значение float (int также допустим); не произвольный пользовательский текст.
Возвратtrue, если значение бесконечное; иначе false.
Ошибки и границыНеподходящий тип может дать TypeError. Функция не исправляет данные и не проверяет бизнес-диапазон.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

Обозначения последующих шагов: условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Проверяем 12.5, INF, −INF, NAN
  2. is_infinite классифицирует каждое численное значение
  3. Возвращает bool; приложение выбирает действие
Четыре класса численных значенийСамостоятельный пример
<?php
var_dump(is_infinite(12.5), is_infinite(INF), is_infinite(-INF), is_infinite(NAN));
Ожидаемый результат
bool(false)
bool(true)
bool(true)
bool(false)

INF и NAN написаны без кавычек: это специальные константы float.

Политика для результата расчётаСамостоятельный пример
<?php
$result = exp(1000);
echo is_infinite($result) ? "range exceeded\n" : "ok\n";
echo is_infinite(sqrt(-4)) ? "infinite\n" : "not infinite\n";
Ожидаемый результат
range exceeded
not infinite

Не бесконечность ещё не означает корректное число: sqrt(-4) даёт NAN. Для общей проверки нужен is_finite.

Когда подходит и где остановиться. is_nan не является отрицанием is_numeric; is_infinite не ловит NAN; is_finite не проверяет положительность или единицы измерения. Сначала подтвердите тип, затем конечность, затем допустимый диапазон. Для NAN не пользуйтесь == или ===.

Сравните: is_finite, is_nan. Выбор по задаче.

is_nanОтличите неопределённый численный результат от обычного измерения и бесконечности.

PHP 4.2+ · standard

is_nan(float $num): bool

Отличите неопределённый численный результат от обычного измерения и бесконечности.

Перед первым опытом: запись is_nan(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numЧисленное значение float (int также допустим); не произвольный пользовательский текст.
Возвратtrue, если значение NAN; иначе false.
Ошибки и границыНеподходящий тип может дать TypeError. Функция не исправляет данные и не проверяет бизнес-диапазон.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

Путь данных в первом примере
  1. Проверяем 12.5, INF, −INF, NAN
  2. is_nan классифицирует каждое численное значение
  3. Возвращает bool; приложение выбирает действие
Четыре класса численных значенийСамостоятельный пример
<?php
var_dump(is_nan(12.5), is_nan(INF), is_nan(-INF), is_nan(NAN));
Ожидаемый результат
bool(false)
bool(false)
bool(false)
bool(true)

INF и NAN написаны без кавычек: это специальные константы float.

Политика для результата расчётаСамостоятельный пример
<?php
$result = sqrt(-4);
var_dump($result === NAN);
var_dump(is_nan($result));
var_dump(is_float($result));
Ожидаемый результат
bool(false)
bool(true)
bool(true)

NAN является значением типа float и не равен самому себе. Это не способ узнать, состоит ли текст формы из цифр.

Когда подходит и где остановиться. is_nan не является отрицанием is_numeric; is_infinite не ловит NAN; is_finite не проверяет положительность или единицы измерения. Сначала подтвердите тип, затем конечность, затем допустимый диапазон. Для NAN не пользуйтесь == или ===.

Сравните: is_finite, is_infinite. Выбор по задаче.

sqrtИз площади квадратной плитки получите сторону: корень отвечает, какое число в квадрате даст исходное.

PHP 4+ · standard

sqrt(float $num): float

Из площади квадратной плитки получите сторону: корень отвечает, какое число в квадрате даст исходное.

Перед первым опытом: запись sqrt(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numНеотрицательное число для действительного корня.
ВозвратНеотрицательный квадратный корень как float; 0 даёт 0.0.
Ошибки и границыОтрицательное число даёт NAN, не исключение. INF даёт INF; неподходящий тип — TypeError.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. Площадь плитки 81 см²
  2. sqrt(81) ищет неотрицательную сторону
  3. 9.0 см; квадрат 9 равен 81
Получить сторону по площадиСамостоятельный пример
<?php
var_dump(sqrt(81));
var_dump(sqrt(0));
Ожидаемый результат
float(9)
float(0)

Это корень в действительных числах; знак стороны не нужен.

Отклонить невозможную площадьСамостоятельный пример
<?php
function squareSide($area) {
    if (!is_finite($area) || $area < 0) { return null; }
    return sqrt($area);
}
var_dump(squareSide(144));
var_dump(squareSide(-4));
var_dump(is_nan(sqrt(-4)));
Ожидаемый результат
float(12)
NULL
bool(true)

null в нашей функции обозначает отказ. Мы проверили данные до вычисления; последняя строка отдельно показывает встроенное поведение.

Когда подходит и где остановиться. sqrt не считает комплексные числа. Для расстояния по двум координатам hypot яснее и избегает некоторых промежуточных переполнений от x*x + y*y. float не подходит для проверки, является ли огромное целое идеальным квадратом, без отдельного точного алгоритма.

Сравните: hypot, pow, is_nan. Выбор по задаче.

powПосчитайте число вариантов из независимых позиций: четыре состояния в трёх позициях дают 4³ = 64.

PHP 4+ · standard

pow(mixed $num, mixed $exponent): int|float|object

Посчитайте число вариантов из независимых позиций: четыре состояния в трёх позициях дают 4³ = 64.

Перед первым опытом: запись pow(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numОснование степени. Для обычного кода передавайте проверенное число.
exponentПоказатель: 3 означает три умножения основания, −1 — обратную величину, 0.5 — квадратный корень для неотрицательного основания.
ВозвратЧисленная степень. Для целых операндов целый представимый результат может остаться int; дробные/непомещающиеся результаты — float. Расширение с перегрузкой арифметики (например GMP) может вернуть объект.
Ошибки и границыОтрицательное основание с дробным показателем обычно даёт NAN в действительной арифметике. С PHP 8.4 ноль в отрицательной степени устарел (E_DEPRECATED); для IEEE поведения есть fpow. Неподдерживаемые операнды, например массив, дают TypeError.

Оператор ** — альтернативная запись той же степени. ^ в PHP означает побитовое XOR, а не степень. Объявленный mixed отражает перегрузку и преобразования, но не обещает осмысленный результат для любого объекта.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат. Условия и обход списка.

Путь данных в первом примере
  1. У каждой позиции 4 состояния; позиций 3
  2. pow(4, 3) = 4 × 4 × 4
  3. 64 варианта типа int
Степень и тип результатаСамостоятельный пример
<?php
var_dump(pow(4, 3));
var_dump(pow(4, -1));
echo 4 ** 3, "\n";
Ожидаемый результат
int(64)
float(0.25)
64

Отрицательная степень возвращает обратное число. Это другое действие, чем умножение 4 на 3.

Масштабировать площадьСамостоятельный пример
<?php
function scaledArea($area, $scale) {
    return $area * pow($scale, 2);
}
echo scaledArea(12, 3), "\n";
var_dump(is_nan(pow(-4, 0.5)));
var_dump(pow(0, 0));
Ожидаемый результат
108
bool(true)
int(1)

При увеличении каждой стороны втрое площадь растёт в девять раз. PHP определяет нулевую степень нуля как 1; не выводите из этого правило для любой математической задачи.

Когда подходит и где остановиться. Не переводите большие идентификаторы в float ради степени. Для произвольной точности выбирают BCMath/GMP по требуемому типу данных. Сигнатура object не означает автоматическую перегрузку для любого пользовательского класса.

Сравните: fpow, sqrt, exp. Выбор по задаче.

fpowКогда численная модель должна возвращать INF/NAN без предупреждения о нуле в отрицательной степени, используйте fpow.

PHP 8.4+ · standard

fpow(float $num, float $exponent): float

Когда численная модель должна возвращать INF/NAN без предупреждения о нуле в отрицательной степени, используйте fpow.

Перед первым опытом: запись fpow(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numЧисленное основание.
exponentЧисленный показатель степени.
ВозвратВсегда float по IEEE 754; в частности 0 в отрицательной степени даёт INF.
Ошибки и границыНепредставимая действительная степень может дать NAN, переполнение — INF. Это особые результаты, а не исправленные исходные данные.

Числа float хранят двоичное приближение. Входной int разрешён и для параметра float. Массив и неподходящая строка не являются числом: возможен TypeError; правила нестрогого преобразования строк и режима strict_types разобраны в главе о типах. Данные формы сначала проверяют, а не исправляют математической функцией.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Затухание: основание 4, показатель −1
  2. fpow(4, −1) вычисляет 1/4
  3. 0.25 как float
Обратная степень и нольСамостоятельный пример
<?php
var_dump(fpow(4, -1));
var_dump(fpow(0, -2));
var_dump(is_nan(fpow(-4, 0.5)));
Ожидаемый результат
float(0.25)
float(INF)
bool(true)

В отличие от pow(0, -2) на PHP 8.4+, здесь нулевое основание предусмотрено IEEE-контрактом.

Отделить вычисление от политики сервисаСамостоятельный пример
<?php
function reciprocalSquare($distance) {
    $factor = fpow($distance, -2);
    return is_finite($factor) ? $factor : null;
}
var_dump(reciprocalSquare(2));
var_dump(reciprocalSquare(0));
Ожидаемый результат
float(0.25)
NULL

Учебный коэффициент обратного квадрата: для нулевого расстояния модель не применима. Решение вернуть null принимает наша функция, а не fpow.

Когда подходит и где остановиться. Функции нет в PHP 8.2/8.3. Если бесконечности нежелательны, проверка нуля перед обычной степенью бывает яснее. fpow не делает арифметику более точной десятично.

Сравните: pow, fdiv, is_finite. Выбор по задаче.

expВ расчёте плавного затухания нужен коэффициент e в степени: exp превращает время модели в положительный множитель.

PHP 4+ · standard

exp(float $num): float

В расчёте плавного затухания нужен коэффициент e в степени: exp превращает время модели в положительный множитель.

Перед первым опытом: запись exp(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numПоказатель степени e; e ≈ 2.71828.
Возвратe в степени num как float.
Ошибки и границыБольшое положительное значение переполняется в INF; очень отрицательное может округлиться до 0. NAN распространяется.

Для exp(0) множитель равен 1. При отрицательном показателе значение между 0 и 1 удобно для затухания; формулу и коэффициент выбирают из модели, функция их не придумывает.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат. Условия и обход списка.

Путь данных в первом примере
  1. Начальный множитель: показатель 0
  2. exp(0) вычисляет e⁰
  3. 1.0: исходная величина не меняется
Единица и положительный показательСамостоятельный пример
<?php
var_dump(exp(0));
printf("%.3f\n", exp(1));
Ожидаемый результат
float(1)
2.718

exp(1) приближённо равно константе M_E.

Плавное уменьшение веса старого событияСамостоятельный пример
<?php
function eventWeight($age, $timeScale) {
    return exp(-$age / $timeScale);
}
printf("%.3f\n", eventWeight(0, 10));
printf("%.3f\n", eventWeight(10, 10));
var_dump(is_infinite(exp(1000)));
Ожидаемый результат
1.000
0.368
bool(true)

Возраст здесь неотрицателен, масштаб времени положителен. Устаревшее событие получает меньший вес; это демонстрационная формула ранжирования.

Когда подходит и где остановиться. Проверяйте единицы возраста и масштаба: минуты и секунды нельзя смешать. Если требуется exp(x) − 1 при малом x, используйте expm1, чтобы не вычитать почти равные числа.

Сравните: expm1, log, pow. Выбор по задаче.

expm1Для очень малого изменения вычислите eˣ − 1, сохранив малую разницу, которую обычное вычитание может потерять.

PHP 4.1+ · standard

expm1(float $num): float

Для очень малого изменения вычислите eˣ − 1, сохранив малую разницу, которую обычное вычитание может потерять.

Перед первым опытом: запись expm1(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numПоказатель степени; особая польза при num близком к нулю.
ВозвратПриближение exp(num) − 1 с лучшим поведением малой разницы.
Ошибки и границыНе произвольная точность: большие значения могут дать INF; NAN остаётся NAN.

Проблема не в записи минуса: exp(x) может уже округлиться до ровно 1. Тогда вычитание 1 потеряет полезный сигнал. expm1 рассчитывает разность другим численным способом.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Малый показатель 0.0000000000000001
  2. exp(x) может округлиться к 1 до вычитания
  3. expm1(x) сохраняет малое ненулевое изменение
Не потерять малое изменениеСамостоятельный пример
<?php
$change = 1e-16;
var_dump(exp($change) - 1 === 0.0);
var_dump(expm1($change) > 0.0);
Ожидаемый результат
bool(true)
bool(true)

1e-16 означает 1 × 10⁻¹⁶. Сравнение проверяет конкретный эффект на проверенном двоичном float, не десятичную финансовую точность.

Доля изменения численной моделиСамостоятельный пример
<?php
$continuousChange = 0.02;
$relativeChange = expm1($continuousChange);
printf("%.6f\n", $relativeChange);
printf("%.6f\n", log1p($relativeChange));
Ожидаемый результат
0.020201
0.020000

Из непрерывного параметра получена относительная доля, затем обратное преобразование log1p. Пример численного анализа, не правило расчёта процентов договора.

Когда подходит и где остановиться. Не заменяйте все exp подряд: если нужен сам множитель, exp яснее. Преимущество expm1 относится к точности малого изменения, а не обещанию большей скорости.

Сравните: exp, log1p. Выбор по задаче.

logУзнайте, в какую степень нужно возвести основание, чтобы получить число: log(32, 2) даёт 5.

PHP 4+ · standard

log(float $num, float $base = M_E): float

Узнайте, в какую степень нужно возвести основание, чтобы получить число: log(32, 2) даёт 5.

Перед первым опытом: запись log(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numАргумент логарифма; для обычного конечного результата нужен num > 0.
baseОснование; по умолчанию e, то есть натуральный логарифм. Для действительного логарифма base > 0 и base ≠ 1.
ВозвратЛогарифм num по основанию base как float.
Ошибки и границыnum = 0 даёт −INF; num < 0 — NAN. В PHP 8.5.11 base ≤ 0 вызывает ValueError, base = 1 даёт особый нечисленный результат; не используйте недопустимое основание.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения. В опытах с отказом try выполняет попытку, catch ловит указанный тип ошибки; как работает обработка исключений.

Путь данных в первом примере
  1. 32 состояния, удвоение на шаг
  2. log(32, 2) ищет число удвоений
  3. 5.0 шагов; 2⁵ = 32
Явное и натуральное основаниеСамостоятельный пример
<?php
echo log(32, 2), "\n";
printf("%.3f\n", log(M_E));
Ожидаемый результат
5
1.000

Второй аргумент можно опустить только если нужен натуральный логарифм.

Не принимать недопустимые данные за нольСамостоятельный пример
<?php
var_dump(log(0));
var_dump(is_nan(log(-2)));
try { log(8, 0); }
catch (ValueError $error) { echo "invalid base\n"; }
var_dump(is_nan(log(8, 1)));
Ожидаемый результат
float(-INF)
bool(true)
invalid base
bool(true)

Последний результат показан для нашего PHP 8.5.11. Условия допустимости проверяют до вычисления: положительный аргумент, положительное основание не 1.

Когда подходит и где остановиться. log не имеет отношения к файлу журнала — это error_log или собственный logger. Для log(1+x) с очень малым x нужен log1p. Численный логарифм не следует применять к огромному строковому ID ради определения его точной длины.

Сравните: log10, log1p, exp. Выбор по задаче.

log10Покажите величины разных порядков на логарифмической шкале: 10, 100 и 1000 превращаются в 1, 2 и 3.

PHP 4+ · standard

log10(float $num): float

Покажите величины разных порядков на логарифмической шкале: 10, 100 и 1000 превращаются в 1, 2 и 3.

Перед первым опытом: запись log10(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numПоложительная величина для конечного результата.
ВозвратДесятичный логарифм как float.
Ошибки и границы0 даёт −INF, отрицательное значение — NAN; результат требует проверки, если вход получен извне.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. Измерение 1000
  2. log10 спрашивает: 10 в какой степени?
  3. 3.0 — позиция на логарифмической шкале
Порядки величинСамостоятельный пример
<?php
echo log10(1000), "\n";
echo log10(0.01), "\n";
Ожидаемый результат
3
-2

Отрицательный логарифм для положительной дроби допустим: 10⁻² = 0.01.

Отказ для шкалы без положительных измеренийСамостоятельный пример
<?php
function chartPosition($value) {
    if (!is_finite($value) || $value <= 0) { return null; }
    return log10($value);
}
var_dump(chartPosition(100));
var_dump(chartPosition(0));
Ожидаемый результат
float(2)
NULL

Логарифмическая ось не может содержать нулевые и отрицательные значения в этой модели. null — сигнал показать отдельное состояние.

Когда подходит и где остановиться. Равные интервалы на такой шкале означают одинаковое отношение, не одинаковую разность. Подписывайте шкалу пользователю. Для числа цифр огромной целочисленной строки надёжнее работа со строкой, а не floor(log10()).

Сравните: log, pow, is_finite. Выбор по задаче.

log1pВычислите ln(1+x) для малой доли x, не теряя её при предварительном сложении с единицей.

PHP 4.1+ · standard

log1p(float $num): float

Вычислите ln(1+x) для малой доли x, не теряя её при предварительном сложении с единицей.

Перед первым опытом: запись log1p(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numДобавка x, а не уже готовое 1+x; для конечного результата x > −1.
ВозвратНатуральный логарифм 1 + num как float.
Ошибки и границыx = −1 даёт −INF, x < −1 — NAN. Малость x не отменяет конечную точность.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Добавка x = 0.0000000000000001
  2. Обычное 1+x может стать 1 из-за округления
  3. log1p(x) сохраняет малое положительное значение
Сложение с единицей и потерянная добавкаСамостоятельный пример
<?php
$delta = 1e-16;
var_dump(log(1 + $delta) === 0.0);
var_dump(log1p($delta) > 0.0);
Ожидаемый результат
bool(true)
bool(true)

В log1p передаётся delta. Передача 1+delta означала бы уже другой логарифм.

Накопление относительного измененияСамостоятельный пример
<?php
$stepChange = 0.01;
$steps = 10;
$totalChange = expm1($steps * log1p($stepChange));
printf("%.6f\n", $totalChange);
var_dump(log1p(-1));
var_dump(is_nan(log1p(-2)));
Ожидаемый результат
0.104622
float(-INF)
bool(true)

Пример модели десяти последовательных изменений по 1%; финансовые правила округления и точный денежный тип сюда не включены.

Когда подходит и где остановиться. Не нужно вручную складывать 1+x перед вызовом. Для обычного log(x) используйте log, а log1p выбирайте именно по структуре формулы.

Сравните: log, expm1. Выбор по задаче.

hypotНа плане склада найдите расстояние по двум смещениям: 3 м по горизонтали и 4 м по вертикали дают 5 м по прямой.

PHP 4.1+ · standard

hypot(float $x, float $y): float

На плане склада найдите расстояние по двум смещениям: 3 м по горизонтали и 4 м по вертикали дают 5 м по прямой.

Перед первым опытом: запись hypot(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
xПервая длина или координатная разность.
yВторая длина или разность в тех же единицах.
ВозвратДлина гипотенузы, математически sqrt(x*x + y*y), неотрицательный float.
Ошибки и границыФункция работает с float, не с картографической проекцией. Особые значения требуют отдельной политики; не обещает конечный результат за пределами float.
Путь данных в первом примере
  1. Смещения от начала: x=3 м, y=4 м
  2. hypot(3, 4) вычисляет длину прямого отрезка
  3. 5.0 м
Прямоугольный треугольникСамостоятельный пример
<?php
var_dump(hypot(3, 4));
var_dump(hypot(-3, 4));
Ожидаемый результат
float(5)
float(5)

Знак координатной разности не меняет длину; единицы обеих осей должны совпадать.

Расстояние между двумя точками планаСамостоятельный пример
<?php
$start = ['x' => 10, 'y' => 20];
$finish = ['x' => 16, 'y' => 28];
echo hypot($finish['x'] - $start['x'], $finish['y'] - $start['y']), "\n";
var_dump(is_finite(hypot(1e200, 1e200)));
var_dump(is_infinite(sqrt(1e200 * 1e200 + 1e200 * 1e200)));
Ожидаемый результат
10
bool(true)
bool(true)

Первый расчёт — плоский план. Вторые строки показывают пользу избегания переполнения промежуточных квадратов на проверенном runtime, не произвольную точность.

Когда подходит и где остановиться. Широта и долгота в градусах — не координаты плоского плана в метрах; для Земли нужны соответствующие формулы и система координат. Не обещайте ускорение относительно sqrt без измерения.

Сравните: sqrt, atan2, is_finite. Выбор по задаче.

piДля длины окружности используйте встроенное приближение π, не запоминая сокращённое 3.14.

PHP 4+ · standard

pi(): float

Для длины окружности используйте встроенное приближение π, не запоминая сокращённое 3.14.

Перед первым опытом: запись pi(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
АргументыОтсутствуют; круглые скобки всё равно нужны при вызове.
ВозвратПриближение π типа float, то же значение, что M_PI.
Ошибки и границыНе произвольная точность и не число с бесконечным количеством разрядов.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат. Условия и обход списка.

Путь данных в первом примере
  1. Радиус 10 см
  2. Берём pi() и умножаем на 2 × 10
  3. Длина окружности приблизительно 62.832 см
Длина окружностиСамостоятельный пример
<?php
$radius = 10;
printf("%.3f\n", 2 * pi() * $radius);
var_dump(pi() === M_PI);
Ожидаемый результат
62.832
bool(true)

M_PI — константа без скобок, pi() — функция без аргументов; численное значение совпадает.

Круглое место на планеСамостоятельный пример
<?php
function circleArea($radius) {
    return pi() * $radius * $radius;
}
printf("%.3f\n", circleArea(2));
printf("%.3f\n", circleArea(4));
Ожидаемый результат
12.566
50.265

Радиус берётся неотрицательным в метрах; площадь получается в квадратных метрах. Удвоение радиуса увеличивает площадь в четыре раза.

Когда подходит и где остановиться. Для угла в радианах используйте deg2rad/rad2deg, чтобы не перепутать коэффициент π/180. Лишние десятичные цифры в самописной константе не расширяют точность float.

Сравните: deg2rad, rad2deg, pow. Выбор по задаче.

sinДля точки на чертеже вычислите вертикальную проекцию единичного радиуса через синус.

PHP 4+ · standard

sin(float $num): float

Для точки на чертеже вычислите вертикальную проекцию единичного радиуса через синус.

Перед первым опытом: запись sin(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numУгол в радианах, не в градусах. π радиан = 180°.
ВозвратСинус как float. Для конечного угла от −1 до 1.
Ошибки и границыНеподходящий тип — TypeError; бесконечный угол не имеет обычного результата и даёт NAN.

Вызов получает уже переведённый угол. Радиан — мера угла: длина дуги единичной окружности. Для градусов из интерфейса сначала вызовите deg2rad.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Нулевой угол в радианах
  2. sin(0) вычисляет синус
  3. Возвращает 0.000 как float
Начальная точка углаСамостоятельный пример
<?php
printf("%.3f\n", sin(0));
Ожидаемый результат
0.000

Результат напечатан до тысячных; это форматирование значения.

Применить угол в геометрииСамостоятельный пример
<?php
$radius = 10;
$angle = deg2rad(30);
printf("%.3f\n", $radius * sin($angle));
Ожидаемый результат
5.000

Высота точки окружности относительно центра равна радиусу × sin угла. Это декартова ось Y вверх; экранная ось может идти вниз.

Когда подходит и где остановиться. Из-за округления sin(π) или cos(π/2) может быть очень малым ненулевым числом. Для геометрического совпадения нужен масштабный допуск. Для очень больших углов теряется информация младших разрядов. Не передавайте 90, подразумевая градусы.

Сравните: asin, cos, deg2rad. Выбор по задаче.

cosДля точки на чертеже вычислите горизонтальную проекцию единичного радиуса через косинус.

PHP 4+ · standard

cos(float $num): float

Для точки на чертеже вычислите горизонтальную проекцию единичного радиуса через косинус.

Перед первым опытом: запись cos(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numУгол в радианах, не в градусах. π радиан = 180°.
ВозвратКосинус как float. Для конечного угла от −1 до 1.
Ошибки и границыНеподходящий тип — TypeError; бесконечный угол не имеет обычного результата и даёт NAN.

Вызов получает уже переведённый угол. Радиан — мера угла: длина дуги единичной окружности. Для градусов из интерфейса сначала вызовите deg2rad.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Нулевой угол в радианах
  2. cos(0) вычисляет косинус
  3. Возвращает 1.000 как float
Начальная точка углаСамостоятельный пример
<?php
printf("%.3f\n", cos(0));
Ожидаемый результат
1.000

Результат напечатан до тысячных; это форматирование значения.

Применить угол в геометрииСамостоятельный пример
<?php
$radius = 10;
$angle = deg2rad(60);
printf("%.3f\n", $radius * cos($angle));
Ожидаемый результат
5.000

Горизонтальная координата точки равна радиусу × cos угла. Ноль градусов направлен вдоль положительной оси X.

Когда подходит и где остановиться. Из-за округления sin(π) или cos(π/2) может быть очень малым ненулевым числом. Для геометрического совпадения нужен масштабный допуск. Для очень больших углов теряется информация младших разрядов. Не передавайте 90, подразумевая градусы.

Сравните: acos, sin, deg2rad. Выбор по задаче.

tanДля точки на чертеже вычислите отношение вертикального смещения к горизонтальному через тангенс.

PHP 4+ · standard

tan(float $num): float

Для точки на чертеже вычислите отношение вертикального смещения к горизонтальному через тангенс.

Перед первым опытом: запись tan(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numУгол в радианах, не в градусах. π радиан = 180°.
ВозвратТангенс как float. Отношение sin/cos там, где математически определено.
Ошибки и границыНеподходящий тип — TypeError; бесконечный угол не имеет обычного результата и даёт NAN.

Вызов получает уже переведённый угол. Радиан — мера угла: длина дуги единичной окружности. Для градусов из интерфейса сначала вызовите deg2rad.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Нулевой угол в радианах
  2. tan(0) вычисляет тангенс
  3. Возвращает 0.000 как float
Начальная точка углаСамостоятельный пример
<?php
printf("%.3f\n", tan(0));
Ожидаемый результат
0.000

Результат напечатан до тысячных; это форматирование значения.

Применить угол в геометрииСамостоятельный пример
<?php
$horizontal = 10;
$slopeAngle = deg2rad(30);
printf("%.3f\n", $horizontal * tan($slopeAngle));
Ожидаемый результат
5.774

Для учебного наклона подъём равен горизонтальному расстоянию × tan угла. Это геометрический расчёт, а не норматив проектирования.

Когда подходит и где остановиться. Возле π/2 + kπ тангенс неустойчив: приближение pi()/2 может дать очень большое конечное число вместо математической бесконечности. Не проверяйте вертикальность через точное равенство cos угла нулю; задайте допустимый диапазон входных углов. Не передавайте 90, подразумевая градусы.

Сравните: atan, atan2, deg2rad. Выбор по задаче.

asinВосстановите угол по синусу: подъём 5 при длине 10 даёт угол для чертежа.

PHP 4+ · standard

asin(float $num): float

Восстановите угол по синусу: подъём 5 при длине 10 даёт угол для чертежа.

Перед первым опытом: запись asin(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерное отношение в диапазоне [−1, 1].
ВозвратГлавное значение обратной функции, float в радианах, диапазон −π/2…π/2.
Ошибки и границыЗначение вне [−1,1] даёт NAN. Неподходящий тип — TypeError.

«Обратная» означает восстановление одного выбранного угла, а не 1/sin(x). Периодичность не позволяет восстановить все обороты из одного отношения. Прямая функция после обратной восстанавливает допустимый вход лишь с точностью float.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Передаём 0 как отношение
  2. asin(0) выбирает главное значение угла
  3. 0.0 радиан; rad2deg нужен для градусов
Минимальный обратный уголСамостоятельный пример
<?php
printf("%.3f\n", asin(0));
Ожидаемый результат
0.000

Без deg2rad на входе: здесь аргумент — отношение сторон, а не угол в градусах.

Угол из измеренных сторонСамостоятельный пример
<?php
$rise = 5;
$length = 10;
printf("%.1f\n", rad2deg(asin($rise / $length)));
Ожидаемый результат
30.0

Стороны заданы в одинаковых единицах. Сначала вычисляется отношение, затем угол в радианах, затем градусы.

Проверить границу областиСамостоятельный пример
<?php
var_dump(is_nan(asin(1.1)));
Ожидаемый результат
bool(true)

Не обрезайте явную ошибку измерения до 1 молча; сначала проверьте источник и допустимую погрешность.

Когда подходит и где остановиться. При малом выходе за [−1,1] из-за вычислительной погрешности иногда допустимо ограничить значение, но только после проверки масштаба ошибки. Для ошибочного отношения 1.1 это скроет проблему.

Сравните: sin, acos, atan. Выбор по задаче.

acosВосстановите угол по косинусу: горизонтальная проекция 5 при длине 10 даёт угол для чертежа.

PHP 4+ · standard

acos(float $num): float

Восстановите угол по косинусу: горизонтальная проекция 5 при длине 10 даёт угол для чертежа.

Перед первым опытом: запись acos(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерное отношение в диапазоне [−1, 1].
ВозвратГлавное значение обратной функции, float в радианах, диапазон 0…π.
Ошибки и границыЗначение вне [−1,1] даёт NAN. Неподходящий тип — TypeError.

«Обратная» означает восстановление одного выбранного угла, а не 1/cos(x). Периодичность не позволяет восстановить все обороты из одного отношения. Прямая функция после обратной восстанавливает допустимый вход лишь с точностью float.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Передаём 1 как отношение
  2. acos(1) выбирает главное значение угла
  3. 0.0 радиан; rad2deg нужен для градусов
Минимальный обратный уголСамостоятельный пример
<?php
printf("%.3f\n", acos(1));
Ожидаемый результат
0.000

Без deg2rad на входе: здесь аргумент — отношение сторон, а не угол в градусах.

Угол из измеренных сторонСамостоятельный пример
<?php
$projection = 5;
$length = 10;
printf("%.1f\n", rad2deg(acos($projection / $length)));
Ожидаемый результат
60.0

Стороны заданы в одинаковых единицах. Сначала вычисляется отношение, затем угол в радианах, затем градусы.

Проверить границу областиСамостоятельный пример
<?php
var_dump(is_nan(acos(1.1)));
Ожидаемый результат
bool(true)

Не обрезайте явную ошибку измерения до 1 молча; сначала проверьте источник и допустимую погрешность.

Когда подходит и где остановиться. При малом выходе за [−1,1] из-за вычислительной погрешности иногда допустимо ограничить значение, но только после проверки масштаба ошибки. Для ошибочного отношения 1.1 это скроет проблему.

Сравните: cos, asin, atan. Выбор по задаче.

atanВосстановите угол по тангенсу: подъём 10 при горизонтали 10 даёт угол для чертежа.

PHP 4+ · standard

atan(float $num): float

Восстановите угол по тангенсу: подъём 10 при горизонтали 10 даёт угол для чертежа.

Перед первым опытом: запись atan(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерное отношение y/x; любое действительное число. Само деление x=0 нужно обрабатывать отдельно.
ВозвратГлавное значение обратной функции, float в радианах, диапазон −π/2…π/2.
Ошибки и границыatan(±INF) соответствует пределам ±π/2, но сам y/x при нуле бросит ошибку до вызова atan. Неподходящий тип — TypeError.

«Обратная» означает восстановление одного выбранного угла, а не 1/tan(x). Периодичность не позволяет восстановить все обороты из одного отношения. Прямая функция после обратной восстанавливает допустимый вход лишь с точностью float.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Передаём 0 как отношение
  2. atan(0) выбирает главное значение угла
  3. 0.0 радиан; rad2deg нужен для градусов
Минимальный обратный уголСамостоятельный пример
<?php
printf("%.3f\n", atan(0));
Ожидаемый результат
0.000

Без deg2rad на входе: здесь аргумент — отношение сторон, а не угол в градусах.

Угол из измеренных сторонСамостоятельный пример
<?php
$rise = 10;
$horizontal = 10;
printf("%.1f\n", rad2deg(atan($rise / $horizontal)));
Ожидаемый результат
45.0

Стороны заданы в одинаковых единицах. Сначала вычисляется отношение, затем угол в радианах, затем градусы.

Почему одного отношения недостаточноСамостоятельный пример
<?php
printf("%.1f\n", rad2deg(atan(1)));
printf("%.1f\n", rad2deg(atan2(-1, -1)));
Ожидаемый результат
45.0
-135.0

Отношение (−1)/(−1) равно 1 и потеряло четверть. atan2 получает оба знака и сохраняет направление.

Когда подходит и где остановиться. Для направления произвольного вектора используйте atan2(y,x), особенно при x=0 и отрицательных координатах.

Сравните: tan, atan2, asin. Выбор по задаче.

atan2Получите направление между двумя точками, сохранив четверть плоскости и не деля самостоятельно на x.

PHP 4+ · standard

atan2(float $y, float $x): float

Получите направление между двумя точками, сохранив четверть плоскости и не деля самостоятельно на x.

Перед первым опытом: запись atan2(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
yВертикальная компонента, передаётся первой.
xГоризонтальная компонента, передаётся второй.
ВозвратУгол в радианах от −π до π включительно с учётом знаков обеих компонент.
Ошибки и границыДля нулевого вектора направление математически не определено: приложение должно обработать его отдельно, хотя runtime возвращает численное значение. Неподходящий тип — TypeError.

В отличие от atan(y/x), atan2 видит знаки по отдельности. На экранной карте ось Y часто направлена вниз: договоритесь о координатах до вычисления.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно; условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Вектор: y=1, x=0
  2. atan2(1,0) обрабатывает вертикаль без y/x
  3. π/2 радиан → rad2deg → 90°
Вертикаль и противоположная четвертьСамостоятельный пример
<?php
printf("%.1f\n", rad2deg(atan2(1, 0)));
printf("%.1f\n", rad2deg(atan2(-1, -1)));
Ожидаемый результат
90.0
-135.0

Порядок именно y, x. Отрицательный результат — допустимое направление по договору функции.

Направление от точки к точкеСамостоятельный пример
<?php
function heading($fromX, $fromY, $toX, $toY) {
    $dx = $toX - $fromX;
    $dy = $toY - $fromY;
    if ($dx == 0 && $dy == 0) { return null; }
    $degrees = rad2deg(atan2($dy, $dx));
    return $degrees < 0 ? $degrees + 360 : $degrees;
}
echo heading(2, 2, 1, 1), "\n";
var_dump(heading(2, 2, 2, 2));
Ожидаемый результат
225
NULL

Координаты здесь точные небольшие целые. Нормализация переводит выбранное направление в [0,360); это не компас с севером в нуле.

Когда подходит и где остановиться. Не называйте направление одного вектора углом между двумя произвольными векторами: для последнего нужны две стороны и правило разности/ориентации. На географической сфере простой atan2 разностей широты/долготы не даёт универсальный азимут.

Сравните: atan, rad2deg, hypot. Выбор по задаче.

deg2radЯвно согласуйте единицы угла между интерфейсом и математическими функциями.

PHP 4+ · standard

deg2rad(float $num): float

Явно согласуйте единицы угла между интерфейсом и математическими функциями.

Перед первым опытом: запись deg2rad(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numУгол в градусах.
ВозвратЭквивалентный угол в радианах: num × π/180. Возврат float.
Ошибки и границыНе нормализует обороты и не проверяет конечность. NAN/INF не становятся обычными конечными углами.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Вход: 180°
  2. deg2rad(180) меняет единицу измерения
  3. Результат 3.142
Перевести половину оборотаСамостоятельный пример
<?php
printf("%.3f\n", deg2rad(180));
Ожидаемый результат
3.142

Половина окружности: 180° = π радиан. Значение π представлено приближённо.

Перевести угол интерфейса до синусаСамостоятельный пример
<?php
$degrees = 30;
$radians = deg2rad($degrees);
printf("%.3f\n", sin($radians));
printf("%.1f\n", rad2deg($radians));
Ожидаемый результат
0.500
30.0

Промежуточная переменная имеет имя с единицами, чтобы дальше не передать градусы вместо радиан.

Когда подходит и где остановиться. 720° превращаются в 4π, а не в 0. Для диапазона оборота применяют отдельную нормализацию fmod. Прямое и обратное преобразования ограничены точностью float.

Сравните: rad2deg, pi, fmod. Выбор по задаче.

rad2degЯвно согласуйте единицы угла между интерфейсом и математическими функциями.

PHP 4+ · standard

rad2deg(float $num): float

Явно согласуйте единицы угла между интерфейсом и математическими функциями.

Перед первым опытом: запись rad2deg(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numУгол в радианах.
ВозвратЭквивалентный угол в градусах: num × 180/π. Возврат float.
Ошибки и границыНе нормализует обороты и не проверяет конечность. NAN/INF не становятся обычными конечными углами.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Вход: π радиан
  2. rad2deg(M_PI) меняет единицу измерения
  3. Результат 180.000
Перевести половину оборотаСамостоятельный пример
<?php
printf("%.3f\n", rad2deg(M_PI));
Ожидаемый результат
180.000

Половина окружности: 180° = π радиан. Значение π представлено приближённо.

Показать вычисленное направление пользователюСамостоятельный пример
<?php
$radians = atan2(1, 1);
printf("%.1f degrees\n", rad2deg($radians));
printf("%.1f degrees\n", rad2deg(-M_PI_2));
Ожидаемый результат
45.0 degrees
-90.0 degrees

Промежуточная переменная имеет имя с единицами, чтобы дальше не передать градусы вместо радиан.

Когда подходит и где остановиться. 720° превращаются в 4π, а не в 0. Для диапазона оборота применяют отдельную нормализацию fmod. Прямое и обратное преобразования ограничены точностью float.

Сравните: deg2rad, pi, fmod. Выбор по задаче.

sinhДля численной шкалы или геометрической модели используйте гиперболический синус; ниже показано, какую величину он преобразует.

PHP 4.1+ · standard

sinh(float $num): float

Для численной шкалы или геометрической модели используйте гиперболический синус; ниже показано, какую величину он преобразует.

Перед первым опытом: запись sinh(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерный аргумент модели. Любое конечное действительное x.
ВозвратГиперболический синус как float. Математическое определение: (exp(x) − exp(−x))/2.
Ошибки и границыЧисленная точность ограничена; sinh/cosh могут переполниться. Неподходящий тип — TypeError; особые float обрабатывайте отдельно.

Гиперболическая функция не является обычной sin/cos/tan для градусов. Здесь не нужен deg2rad: аргумент задаёт выбранная модель. Формулы через exp объясняют математический смысл, а не рекомендуют менее устойчивую ручную реализацию.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Опорное значение 0
  2. sinh(0) вычисляет гиперболический синус
  3. Возвращает 0.000 как float
Начальное значение преобразованияСамостоятельный пример
<?php
printf("%.3f\n", sinh(0));
Ожидаемый результат
0.000

Опорная точка помогает проверить, какая именно функция нужна формуле.

Преобразование внутри моделиСамостоятельный пример
<?php
$scaled = asinh(12.0);
printf("%.3f\n", sinh($scaled));
printf("%.3f\n", sinh(-$scaled));
Ожидаемый результат
12.000
-12.000

Восстановление исходного показания после asinh-преобразования шкалы; знак сохраняется.

Когда подходит и где остановиться. Обратимость математической формулы не гарантирует точного побитового восстановления float. Подпишите шкалу и её единицы, а при сохранении данных держите исходное измерение отдельно. Это специализированная математика: не нужна обычному выводу цены или обработке формы.

Сравните: asinh, exp, is_finite. Выбор по задаче.

coshДля численной шкалы или геометрической модели используйте гиперболический косинус; ниже показано, какую величину он преобразует.

PHP 4.1+ · standard

cosh(float $num): float

Для численной шкалы или геометрической модели используйте гиперболический косинус; ниже показано, какую величину он преобразует.

Перед первым опытом: запись cosh(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерный аргумент модели. Любое конечное действительное x.
ВозвратГиперболический косинус как float. Математическое определение: (exp(x) + exp(−x))/2.
Ошибки и границыЧисленная точность ограничена; sinh/cosh могут переполниться. Неподходящий тип — TypeError; особые float обрабатывайте отдельно.

Гиперболическая функция не является обычной sin/cos/tan для градусов. Здесь не нужен deg2rad: аргумент задаёт выбранная модель. Формулы через exp объясняют математический смысл, а не рекомендуют менее устойчивую ручную реализацию.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Опорное значение 0
  2. cosh(0) вычисляет гиперболический косинус
  3. Возвращает 1.000 как float
Начальное значение преобразованияСамостоятельный пример
<?php
printf("%.3f\n", cosh(0));
Ожидаемый результат
1.000

Опорная точка помогает проверить, какая именно функция нужна формуле.

Преобразование внутри моделиСамостоятельный пример
<?php
$a = 10.0;
$x = 5.0;
$height = $a * (cosh($x / $a) - 1);
printf("%.3f\n", $height);
printf("%.3f\n", $a * (cosh(-$x / $a) - 1));
Ожидаемый результат
1.276
1.276

Симметричная учебная цепная линия. Параметр a — масштаб модели, это не расчёт прочности реального подвеса.

Когда подходит и где остановиться. Обратимость математической формулы не гарантирует точного побитового восстановления float. Подпишите шкалу и её единицы, а при сохранении данных держите исходное измерение отдельно. Это специализированная математика: не нужна обычному выводу цены или обработке формы.

Сравните: acosh, exp, is_finite. Выбор по задаче.

tanhДля численной шкалы или геометрической модели используйте гиперболический тангенс; ниже показано, какую величину он преобразует.

PHP 4.1+ · standard

tanh(float $num): float

Для численной шкалы или геометрической модели используйте гиперболический тангенс; ниже показано, какую величину он преобразует.

Перед первым опытом: запись tanh(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерный аргумент модели. Любое конечное действительное x.
ВозвратГиперболический тангенс как float. Математическое определение: sinh(x)/cosh(x).
Ошибки и границыЧисленная точность ограничена; sinh/cosh могут переполниться. Неподходящий тип — TypeError; особые float обрабатывайте отдельно.

Гиперболическая функция не является обычной sin/cos/tan для градусов. Здесь не нужен deg2rad: аргумент задаёт выбранная модель. Формулы через exp объясняют математический смысл, а не рекомендуют менее устойчивую ручную реализацию.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: foreach ($list as $value) последовательно берёт элементы списка; [a, b] создаёт список. Условия и обход списка.

Путь данных в первом примере
  1. Опорное значение 0
  2. tanh(0) вычисляет гиперболический тангенс
  3. Возвращает 0.000 как float
Начальное значение преобразованияСамостоятельный пример
<?php
printf("%.3f\n", tanh(0));
Ожидаемый результат
0.000

Опорная точка помогает проверить, какая именно функция нужна формуле.

Преобразование внутри моделиСамостоятельный пример
<?php
foreach ([-3.0, 0.0, 3.0] as $score) {
    printf("%.3f\n", tanh($score));
}
Ожидаемый результат
-0.995
0.000
0.995

Сжатие рейтингового сигнала к диапазону около −1…1 без жёсткого обрезания; это выбранная математическая шкала.

Когда подходит и где остановиться. tanh конечного x математически лежит строго между −1 и 1, но float может округлиться до границы. Не используйте atanh(результат) без проверки границы. Это специализированная математика: не нужна обычному выводу цены или обработке формы.

Сравните: atanh, exp, is_finite. Выбор по задаче.

asinhДля численной шкалы или геометрической модели используйте обратный гиперболический синус; ниже показано, какую величину он преобразует.

PHP 4.1+ · standard

asinh(float $num): float

Для численной шкалы или геометрической модели используйте обратный гиперболический синус; ниже показано, какую величину он преобразует.

Перед первым опытом: запись asinh(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерный аргумент модели. Любое действительное x; допускает отрицательные значения и ноль.
ВозвратОбратный гиперболический синус как float. Математическое определение: обратная функция sinh.
Ошибки и границыЧисленная точность ограничена; sinh/cosh могут переполниться. Неподходящий тип — TypeError; особые float обрабатывайте отдельно.

Гиперболическая функция не является обычной sin/cos/tan для градусов. Здесь не нужен deg2rad: аргумент задаёт выбранная модель. Формулы через exp объясняют математический смысл, а не рекомендуют менее устойчивую ручную реализацию.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Обозначения последующих шагов: foreach ($list as $value) последовательно берёт элементы списка; [a, b] создаёт список. Условия и обход списка.

Путь данных в первом примере
  1. Опорное значение 0
  2. asinh(0) вычисляет обратный гиперболический синус
  3. Возвращает 0.000 как float
Начальное значение преобразованияСамостоятельный пример
<?php
printf("%.3f\n", asinh(0));
Ожидаемый результат
0.000

Опорная точка помогает проверить, какая именно функция нужна формуле.

Преобразование внутри моделиСамостоятельный пример
<?php
foreach ([-100.0, 0.0, 100.0] as $value) {
    printf("%.3f\n", asinh($value));
}
Ожидаемый результат
-5.298
0.000
5.298

Шкала для графика значений разных порядков, включая отрицательные. В отличие от log(x), ноль и отрицательные входы допустимы.

Когда подходит и где остановиться. Обратимость математической формулы не гарантирует точного побитового восстановления float. Подпишите шкалу и её единицы, а при сохранении данных держите исходное измерение отдельно. Это специализированная математика: не нужна обычному выводу цены или обработке формы.

Сравните: sinh, exp, is_finite. Выбор по задаче.

acoshДля численной шкалы или геометрической модели используйте обратный гиперболический косинус; ниже показано, какую величину он преобразует.

PHP 4.1+ · standard

acosh(float $num): float

Для численной шкалы или геометрической модели используйте обратный гиперболический косинус; ниже показано, какую величину он преобразует.

Перед первым опытом: запись acosh(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерный аргумент модели. x ≥ 1; результат неотрицателен.
ВозвратОбратный гиперболический косинус как float. Математическое определение: обратная функция cosh на неотрицательной ветви.
Ошибки и границыЗа пределами области определения возвращается NAN. Неподходящий тип — TypeError; особые float обрабатывайте отдельно.

Гиперболическая функция не является обычной sin/cos/tan для градусов. Здесь не нужен deg2rad: аргумент задаёт выбранная модель. Формулы через exp объясняют математический смысл, а не рекомендуют менее устойчивую ручную реализацию.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Опорное значение 1
  2. acosh(1) вычисляет обратный гиперболический косинус
  3. Возвращает 0.000 как float
Начальное значение преобразованияСамостоятельный пример
<?php
printf("%.3f\n", acosh(1));
Ожидаемый результат
0.000

Опорная точка помогает проверить, какая именно функция нужна формуле.

Преобразование внутри моделиСамостоятельный пример
<?php
$a = 10.0;
$height = 5.0;
$x = $a * acosh(1 + $height / $a);
printf("%.3f\n", $x);
var_dump(is_nan(acosh(0.5)));
Ожидаемый результат
9.624
bool(true)

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

Когда подходит и где остановиться. Обратимость математической формулы не гарантирует точного побитового восстановления float. Подпишите шкалу и её единицы, а при сохранении данных держите исходное измерение отдельно. Это специализированная математика: не нужна обычному выводу цены или обработке формы.

Сравните: cosh, exp, is_finite. Выбор по задаче.

atanhДля численной шкалы или геометрической модели используйте обратный гиперболический тангенс; ниже показано, какую величину он преобразует.

PHP 4.1+ · standard

atanh(float $num): float

Для численной шкалы или геометрической модели используйте обратный гиперболический тангенс; ниже показано, какую величину он преобразует.

Перед первым опытом: запись atanh(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numБезразмерный аргумент модели. Для конечного результата −1 < x < 1.
ВозвратОбратный гиперболический тангенс как float. Математическое определение: обратная функция tanh.
Ошибки и границыЗа пределами области определения возвращается NAN. Неподходящий тип — TypeError; особые float обрабатывайте отдельно.

Гиперболическая функция не является обычной sin/cos/tan для градусов. Здесь не нужен deg2rad: аргумент задаёт выбранная модель. Формулы через exp объясняют математический смысл, а не рекомендуют менее устойчивую ручную реализацию.

В примерах printf("%.3f\n", $value) печатает число с тремя знаками после точки; это формат вывода, само значение в памяти не становится точным десятичным числом. if выбирает ветку, function объявляет повторяемое действие, return возвращает его результат: начальные объяснения.

Путь данных в первом примере
  1. Опорное значение 0
  2. atanh(0) вычисляет обратный гиперболический тангенс
  3. Возвращает 0.000 как float
Начальное значение преобразованияСамостоятельный пример
<?php
printf("%.3f\n", atanh(0));
Ожидаемый результат
0.000

Опорная точка помогает проверить, какая именно функция нужна формуле.

Преобразование внутри моделиСамостоятельный пример
<?php
printf("%.3f\n", atanh(0.5));
var_dump(atanh(1), atanh(-1));
var_dump(is_nan(atanh(1.1)));
Ожидаемый результат
0.549
float(INF)
float(-INF)
bool(true)

Обратное преобразование сжатого сигнала. На границах ±1 получается бесконечность, снаружи — NAN.

Когда подходит и где остановиться. Обратимость математической формулы не гарантирует точного побитового восстановления float. Подпишите шкалу и её единицы, а при сохранении данных держите исходное измерение отдельно. Это специализированная математика: не нужна обычному выводу цены или обработке формы.

Сравните: tanh, exp, is_finite. Выбор по задаче.

base_convertПереведите небольшое целое между системами счисления: число 255 записывается как ff в основании 16.

PHP 4+ · standard

base_convert(string $num, int $from_base, int $to_base): string

Переведите небольшое целое между системами счисления: число 255 записывается как ff в основании 16.

Перед первым опытом: запись base_convert(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numСтрока цифр исходной системы. Буквы a…z обозначают 10…35, регистр не важен. Это целое представление, не десятичная дробь и не кодирование произвольного текста.
from_baseОснование исходной записи: от 2 до 36 включительно.
to_baseОснование результата: от 2 до 36 включительно.
ВозвратСтрока цифр в целевой системе; буквы a…z, ведущие нули не сохраняются.
Ошибки и границыНеверное основание даёт ValueError. Недопустимые символы пропускаются, но с PHP 7.4 это E_DEPRECATED, поэтому функция не валидатор. Для больших чисел возможна потеря точности из-за внутреннего float.

В опытах с отказом try выполняет попытку, catch ловит указанный тип ошибки; как работает обработка исключений.

Обозначения последующих шагов: function name($value) { ... } объявляет действие; имя в круглых скобках — локальный параметр; return завершает вызов и отдаёт результат; if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. Строка "255", исходное основание 10
  2. base_convert("255", 10, 16) меняет запись числа
  3. Возвращает строку "ff", не байт с кодом 255
Сменить запись небольшого числаСамостоятельный пример
<?php
var_dump(base_convert('255', 10, 16));
echo base_convert('FF', 16, 2), "\n";
echo base_convert('0035', 10, 36), "\n";
Ожидаемый результат
string(2) "ff"
11111111
z

Кавычки передают запись числа как текст. 0035 — не сохранение форматирования, результат представляет ту же величину.

Короткая метка из проверенного небольшого IDСамостоятельный пример
<?php
function shortLabel($id) {
    if ($id < 0 || $id > 1000000) {
        throw new InvalidArgumentException('ID out of range');
    }
    return 'ITEM-' . base_convert((string) $id, 10, 36);
}
echo shortLabel(1295), "\n";
try { base_convert('10', 1, 16); }
catch (ValueError $error) { echo "invalid base\n"; }
Ожидаемый результат
ITEM-zz
invalid base

Контракт shortLabel предполагает заранее проверенный int. Метка обратима и угадываема: она не является токеном доступа или скрытием ID.

Когда подходит и где остановиться. Не переводите длинный хеш в decimal через base_convert ради хранения: младшие разряды могут измениться. Для произвольной точности нужен алгоритм/расширение с точными большими целыми, например GMP. Для байтов используйте bin2hex/hex2bin, а не численную конверсию.

Сравните: bindec, hexdec, octdec. Выбор по задаче.

bindecПрочитайте двоичную запись из интеграции как обычное число.

PHP 4+ · standard

bindec(string $binary_string): int|float

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

Перед первым опытом: запись bindec(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
binary_stringСтрока цифр основания 2; только 0 и 1.
ВозвратЧисленное значение: int пока помещается, иначе float с возможной потерей точности.
Ошибки и границыНедопустимые символы пропускаются; с PHP 7.4 выдаётся E_DEPRECATED. Это не безопасный способ исправлять ошибочную строку. Передавайте именно строку, особенно при strict_types.

Самый левый бит — разряд величины, не знак. bindec читает беззнаковое представление; строка из одних единиц не означает −1. Оператор & в прикладном примере проверяет отдельный бит маски: 4 обозначает третий бит справа; это не логическое &&. Перед примером проверки: strspn($text, "01") считает длину начальной части из разрешённых символов; strlen даёт всю длину ASCII-записи. ctype_xdigit проверяет шестнадцатеричные символы. !== проверяет различие с учётом типа; === — совпадение.

Обозначения последующих шагов: if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно; условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Входная строка "10110" в основании 2
  2. bindec суммирует значения её разрядов
  3. Возвращает int 22
Запись и величинаСамостоятельный пример
<?php
echo bindec('10110'), "\n";
Ожидаемый результат
22

Вывод по умолчанию десятичный: изменение записи не меняет величину.

Битовая маска из диагностического протоколаСамостоятельный пример
<?php
$flags = '00000101';
$value = bindec($flags);
echo $value, "\n";
echo ($value & 4) !== 0 ? "export enabled\n" : "export disabled\n";
Ожидаемый результат
5
export enabled

Сначала получаем число, затем применяем правило к нему; преобразование не проверяет смысл поля протокола.

Отклонить ошибочную строку до конверсииСамостоятельный пример
<?php
$text = '102';
if ($text !== '' && strspn($text, '01') === strlen($text)) {
    echo bindec($text), "\n";
} else {
    echo "invalid digits\n";
}
Ожидаемый результат
invalid digits

strspn считает длину начальной части из разрешённых символов, strlen — всю длину в байтах; для ASCII-цифр это проверка всей записи. ctype_xdigit проверяет шестнадцатеричные символы. Ни один из вариантов не ограничивает размер числа: задайте максимальную длину отдельно.

Когда подходит и где остановиться. Не храните большие внешние идентификаторы как float: храните исходную проверенную строку или примените большие целые. Знак минуса, разделители и префиксы нужно разбирать по контракту своего протокола, а не полагаться на игнорирование символов. Для двоичного файла нужен разбор байтов, а не bindec всей строки.

Сравните: base_convert, decbin. Выбор по задаче.

hexdecПрочитайте шестнадцатеричную запись из интеграции как обычное число.

PHP 4+ · standard

hexdec(string $hex_string): int|float

Прочитайте шестнадцатеричную запись из интеграции как обычное число.

Перед первым опытом: запись hexdec(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
hex_stringСтрока цифр основания 16; только 0…9, a…f/A…F.
ВозвратЧисленное значение: int пока помещается, иначе float с возможной потерей точности.
Ошибки и границыНедопустимые символы пропускаются; с PHP 7.4 выдаётся E_DEPRECATED. Это не безопасный способ исправлять ошибочную строку. Передавайте именно строку, особенно при strict_types.

Передаётся строка записи числа, а не готовый числовой литерал другого основания. Преобразование не сохраняет ведущие нули. Перед примером проверки: strspn($text, "01") считает длину начальной части из разрешённых символов; strlen даёт всю длину ASCII-записи. ctype_xdigit проверяет шестнадцатеричные символы. !== проверяет различие с учётом типа; === — совпадение.

Обозначения последующих шагов: if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно; условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Входная строка "2A" в основании 16
  2. hexdec суммирует значения её разрядов
  3. Возвращает int 42
Запись и величинаСамостоятельный пример
<?php
echo hexdec('2A'), "\n";
Ожидаемый результат
42

Вывод по умолчанию десятичный: изменение записи не меняет величину.

Компонент цвета из CSSСамостоятельный пример
<?php
$component = '7f';
$intensity = hexdec($component);
echo $intensity, "\n";
echo $intensity / 255 < 0.5 ? "lower half\n" : "upper half\n";
Ожидаемый результат
127
lower half

Сначала получаем число, затем применяем правило к нему; преобразование не проверяет смысл поля протокола.

Отклонить ошибочную строку до конверсииСамостоятельный пример
<?php
$text = '7g';
if ($text !== '' && ctype_xdigit($text)) {
    echo hexdec($text), "\n";
} else {
    echo "invalid digits\n";
}
Ожидаемый результат
invalid digits

strspn считает длину начальной части из разрешённых символов, strlen — всю длину в байтах; для ASCII-цифр это проверка всей записи. ctype_xdigit проверяет шестнадцатеричные символы. Ни один из вариантов не ограничивает размер числа: задайте максимальную длину отдельно.

Когда подходит и где остановиться. Не храните большие внешние идентификаторы как float: храните исходную проверенную строку или примените большие целые. Знак минуса, разделители и префиксы нужно разбирать по контракту своего протокола, а не полагаться на игнорирование символов. Для двоичного файла нужен разбор байтов, а не bindec всей строки.

Сравните: base_convert, dechex. Выбор по задаче.

octdecПрочитайте восьмеричную запись из интеграции как обычное число.

PHP 4+ · standard

octdec(string $octal_string): int|float

Прочитайте восьмеричную запись из интеграции как обычное число.

Перед первым опытом: запись octdec(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
octal_stringСтрока цифр основания 8; только 0…7.
ВозвратЧисленное значение: int пока помещается, иначе float с возможной потерей точности.
Ошибки и границыНедопустимые символы пропускаются; с PHP 7.4 выдаётся E_DEPRECATED. Это не безопасный способ исправлять ошибочную строку. Передавайте именно строку, особенно при strict_types.

Передаётся строка записи числа, а не готовый числовой литерал другого основания. Преобразование не сохраняет ведущие нули. Перед примером проверки: strspn($text, "01") считает длину начальной части из разрешённых символов; strlen даёт всю длину ASCII-записи. ctype_xdigit проверяет шестнадцатеричные символы. !== проверяет различие с учётом типа; === — совпадение.

Обозначения последующих шагов: if (условие) { ... } выполняет блок только при истинном условии; ! отрицает, && требует оба условия, || — хотя бы одно. Условия и обход списка.

Путь данных в первом примере
  1. Входная строка "640" в основании 8
  2. octdec суммирует значения её разрядов
  3. Возвращает int 416
Запись и величинаСамостоятельный пример
<?php
echo octdec('640'), "\n";
Ожидаемый результат
416

Вывод по умолчанию десятичный: изменение записи не меняет величину.

Разобрать конфигурацию прав, ничего не меняя на дискеСамостоятельный пример
<?php
$permissions = '640';
$mask = octdec($permissions);
echo $mask, "\n";
echo decoct($mask), "\n";
Ожидаемый результат
416
640

В этом примере строка заранее известна и допустима. Восьмеричная запись прав сама по себе не выполняет chmod и не меняет систему.

Отклонить ошибочную строку до конверсииСамостоятельный пример
<?php
$text = '680';
if ($text !== '' && strspn($text, '01234567') === strlen($text)) {
    echo octdec($text), "\n";
} else {
    echo "invalid digits\n";
}
Ожидаемый результат
invalid digits

strspn считает длину начальной части из разрешённых символов, strlen — всю длину в байтах; для ASCII-цифр это проверка всей записи. ctype_xdigit проверяет шестнадцатеричные символы. Ни один из вариантов не ограничивает размер числа: задайте максимальную длину отдельно.

Когда подходит и где остановиться. Не храните большие внешние идентификаторы как float: храните исходную проверенную строку или примените большие целые. Знак минуса, разделители и префиксы нужно разбирать по контракту своего протокола, а не полагаться на игнорирование символов. Для двоичного файла нужен разбор байтов, а не bindec всей строки.

Сравните: base_convert, decoct. Выбор по задаче.

decbinПолучите текстовую двоичную запись целого числа для диагностики и обмена.

PHP 4+ · standard

decbin(int $num): string

Получите текстовую двоичную запись целого числа для диагностики и обмена.

Перед первым опытом: запись decbin(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numМашинное целое int. Отрицательные значения показываются как беззнаковое машинное слово соответствующей разрядности.
ВозвратСтрока цифр основания 2; без префикса и ведущих нулей.
Ошибки и границыНе конвертер произвольно большого decimal-текста. Размер int зависит от платформы: PHP_INT_SIZE обычно 4 или 8 байт. Неподходящий тип даёт TypeError в строгом режиме.

Это изменение записи, не сохранение числа в двоичном файле. Для −1 все биты машинного слова равны 1: 32/64 двоичных цифры, 8/16 hex-цифр; восьмеричная верхняя цифра содержит неполные три бита. str_pad($text, 8, "0", STR_PAD_LEFT) дополняет текст слева до восьми символов; strlen измеряет длину; str_repeat("7", 3) создаёт "777". Литерал 0640 — восьмеричное число в исходном PHP, кавычки превращают запись в строку. Строки и их функции.

Обозначения последующих шагов: условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Передаём целое 13
  2. decbin представляет его цифрами основания 2
  3. Возвращает строку "1101"
Число превращается в строкуСамостоятельный пример
<?php
var_dump(decbin(13));
Ожидаемый результат
string(4) "1101"

Тип string нужен для передачи записи; арифметические операции над этой строкой не используют автоматически её основание.

Показать маску фиксированной шириныСамостоятельный пример
<?php
$flags = 5;
echo str_pad(decbin($flags), 8, '0', STR_PAD_LEFT), "\n";
echo strlen(decbin(-1)) === PHP_INT_SIZE * 8 ? "machine width\n" : "other width\n";
Ожидаемый результат
00000101
machine width

str_pad дополняет текст слева нулями; STR_PAD_LEFT — именованное направление. Компоненты цвета заранее ограничены 0…255. Литерал 0640 в PHP восьмеричный, а строка "640" — текст. Проверка отрицательного значения не печатает платформозависимое число целиком.

Когда подходит и где остановиться. Принимается signed int, хотя отрицательное значение интерпретируется как unsigned-машинная запись. Не вычисляйте «верхнюю unsigned границу» через PHP_INT_MAX * 2 + 1 и не передавайте получившийся float: он уже может быть неточным. decbin(-1) и bindec результата не обязаны образовать signed-обратное преобразование.

Сравните: bindec, base_convert. Выбор по задаче.

dechexПолучите текстовую шестнадцатеричную запись целого числа для диагностики и обмена.

PHP 4+ · standard

dechex(int $num): string

Получите текстовую шестнадцатеричную запись целого числа для диагностики и обмена.

Перед первым опытом: запись dechex(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numМашинное целое int. Отрицательные значения показываются как беззнаковое машинное слово соответствующей разрядности.
ВозвратСтрока цифр основания 16; без префикса и ведущих нулей. Буквы a…f строчные.
Ошибки и границыНе конвертер произвольно большого decimal-текста. Размер int зависит от платформы: PHP_INT_SIZE обычно 4 или 8 байт. Неподходящий тип даёт TypeError в строгом режиме.

Это изменение записи, не сохранение числа в двоичном файле. Для −1 все биты машинного слова равны 1: 32/64 двоичных цифры, 8/16 hex-цифр; восьмеричная верхняя цифра содержит неполные три бита. str_pad($text, 8, "0", STR_PAD_LEFT) дополняет текст слева до восьми символов; strlen измеряет длину; str_repeat("7", 3) создаёт "777". Литерал 0640 — восьмеричное число в исходном PHP, кавычки превращают запись в строку. Строки и их функции.

Обозначения последующих шагов: условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Передаём целое 171
  2. dechex представляет его цифрами основания 16
  3. Возвращает строку "ab"
Число превращается в строкуСамостоятельный пример
<?php
var_dump(dechex(171));
Ожидаемый результат
string(2) "ab"

Тип string нужен для передачи записи; арифметические операции над этой строкой не используют автоматически её основание.

Собрать цвет из проверенных компонентовСамостоятельный пример
<?php
$red = 15;
$green = 128;
$blue = 255;
echo '#', str_pad(dechex($red), 2, '0', STR_PAD_LEFT),
    str_pad(dechex($green), 2, '0', STR_PAD_LEFT),
    str_pad(dechex($blue), 2, '0', STR_PAD_LEFT), "\n";
echo strlen(dechex(-1)) === PHP_INT_SIZE * 2 ? "machine width\n" : "other width\n";
Ожидаемый результат
#0f80ff
machine width

str_pad дополняет текст слева нулями; STR_PAD_LEFT — именованное направление. Компоненты цвета заранее ограничены 0…255. Литерал 0640 в PHP восьмеричный, а строка "640" — текст. Проверка отрицательного значения не печатает платформозависимое число целиком.

Когда подходит и где остановиться. Принимается signed int, хотя отрицательное значение интерпретируется как unsigned-машинная запись. Не вычисляйте «верхнюю unsigned границу» через PHP_INT_MAX * 2 + 1 и не передавайте получившийся float: он уже может быть неточным. decbin(-1) и bindec результата не обязаны образовать signed-обратное преобразование.

Сравните: hexdec, base_convert. Выбор по задаче.

decoctПолучите текстовую восьмеричную запись целого числа для диагностики и обмена.

PHP 4+ · standard

decoct(int $num): string

Получите текстовую восьмеричную запись целого числа для диагностики и обмена.

Перед первым опытом: запись decoct(...) вызывает функцию; в круглых скобках передаются значения через запятую, возвращённое значение можно сохранить через =. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
numМашинное целое int. Отрицательные значения показываются как беззнаковое машинное слово соответствующей разрядности.
ВозвратСтрока цифр основания 8; без префикса и ведущих нулей.
Ошибки и границыНе конвертер произвольно большого decimal-текста. Размер int зависит от платформы: PHP_INT_SIZE обычно 4 или 8 байт. Неподходящий тип даёт TypeError в строгом режиме.

Это изменение записи, не сохранение числа в двоичном файле. Для −1 все биты машинного слова равны 1: 32/64 двоичных цифры, 8/16 hex-цифр; восьмеричная верхняя цифра содержит неполные три бита. str_pad($text, 8, "0", STR_PAD_LEFT) дополняет текст слева до восьми символов; strlen измеряет длину; str_repeat("7", 3) создаёт "777". Литерал 0640 — восьмеричное число в исходном PHP, кавычки превращают запись в строку. Строки и их функции.

Обозначения последующих шагов: условие ? A : B выбирает результат A при истине, иначе B. Условия и обход списка.

Путь данных в первом примере
  1. Передаём целое 416
  2. decoct представляет его цифрами основания 8
  3. Возвращает строку "640"
Число превращается в строкуСамостоятельный пример
<?php
var_dump(decoct(416));
Ожидаемый результат
string(3) "640"

Тип string нужен для передачи записи; арифметические операции над этой строкой не используют автоматически её основание.

Показать права и отрицательное машинное словоСамостоятельный пример
<?php
$permissions = 0640;
echo decoct($permissions), "\n";
echo decoct(-1) === str_repeat('7', intdiv(PHP_INT_SIZE * 8, 3)) ? "all sevens\n" : "leading partial digit\n";
Ожидаемый результат
640
leading partial digit

str_pad дополняет текст слева нулями; STR_PAD_LEFT — именованное направление. Компоненты цвета заранее ограничены 0…255. Литерал 0640 в PHP восьмеричный, а строка "640" — текст. Проверка отрицательного значения не печатает платформозависимое число целиком.

Когда подходит и где остановиться. Принимается signed int, хотя отрицательное значение интерпретируется как unsigned-машинная запись. Не вычисляйте «верхнюю unsigned границу» через PHP_INT_MAX * 2 + 1 и не передавайте получившийся float: он уже может быть неточным. decbin(-1) и bindec результата не обязаны образовать signed-обратное преобразование.

Сравните: octdec, base_convert. Выбор по задаче.

RoundingModeРежим — часть договора расчёта: «половину вверх» и «любую дробь вверх» нужно различать.

PHP 8.4+ · standard

enum RoundingMode { case HalfAwayFromZero; case HalfTowardsZero; case HalfEven; case HalfOdd; case TowardsZero; case AwayFromZero; case NegativeInfinity; case PositiveInfinity; }

Режим — часть договора расчёта: «половину вверх» и «любую дробь вверх» нужно различать.

Перед первым опытом: RoundingMode::HalfEven выбирает именованный вариант, который затем передаётся в round. Сам enum не является вызываемой функцией. echo печатает, var_dump показывает ещё и тип, "\n" переносит строку. Параметр, вызов и возврат; Как читать числовые типы и результаты.

Вход или результатТочный договор
Выбор вариантаRoundingMode::HalfEven — конкретный вариант встроенного enum. :: обращается к именованному варианту, это не вызов функции.
Где передатьАргумент mode у round(), bcround() и BcMath\Number::round(). Последние два принадлежат отдельному расширению BCMath.
precisionЗадаётся в вызываемой функции; правило действует на выбранный десятичный разряд. Сам enum не округляет.
ВозвратВариант enum является объектом без числового backing value. cases() перечисляет варианты; ->name даёт имя. Вычисленный float возвращает round, не enum.
Ошибки и границыВ PHP 8.2/8.3 этого enum нет; для четырёх половинных режимов используйте PHP_ROUND_HALF_*. Дополнительные направленные режимы требуют PHP 8.4.
ВариантПравилоДля 2.5 / −2.5
HalfAwayFromZeroБлижайшее, на половине от нуля3 / −3
HalfTowardsZeroБлижайшее, на половине к нулю2 / −2
HalfEvenБлижайшее, на половине к чётному2 / −2
HalfOddБлижайшее, на половине к нечётному3 / −3
TowardsZeroВсе дроби к нулю2 / −2
AwayFromZeroВсе ненулевые дроби от нуля3 / −3
NegativeInfinityВсегда к меньшему или равному2 / −3
PositiveInfinityВсегда к большему или равному3 / −2

Например, при precision = 1 выбираются соседние десятые; «чётный» относится к последнему сохраняемому разряду. Что такое enum и его варианты.

Обозначения последующих шагов: foreach ($list as $value) последовательно берёт элементы списка; [a, b] создаёт список. Условия и обход списка.

Путь данных в первом примере
  1. Измерение 2.9; требуется отбросить дробь
  2. round(2.9, 0, RoundingMode::TowardsZero)
  3. 2.0; HalfTowardsZero дал бы 3.0, потому что это не половина
Ближайшее и направленное округление различаютсяСамостоятельный пример
<?php
echo round(2.9, 0, RoundingMode::TowardsZero), "\n";
echo round(2.9, 0, RoundingMode::HalfTowardsZero), "\n";
echo round(-2.1, 0, RoundingMode::NegativeInfinity), "\n";
Ожидаемый результат
2
3
-3

Все три строки требуют PHP 8.4+. Слово Half в названии означает специальное правило только для точной половины.

Проверить все восемь правил на своей таблицеСамостоятельный пример
<?php
foreach (RoundingMode::cases() as $mode) {
    echo $mode->name, ': ', round(2.5, 0, $mode), '/', round(-2.5, 0, $mode), "\n";
}
Ожидаемый результат
HalfAwayFromZero: 3/-3
HalfTowardsZero: 2/-2
HalfEven: 2/-2
HalfOdd: 3/-3
TowardsZero: 2/-2
AwayFromZero: 3/-3
NegativeInfinity: 2/-3
PositiveInfinity: 3/-2

foreach по очереди получает каждый вариант в $mode; ->name нужен только для подписи. В реальном расчёте режим фиксируют в договоре, а не перебирают.

Когда подходит и где остановиться. PHP_ROUND_HALF_UP соответствует HalfAwayFromZero, а не AwayFromZero; PHP_ROUND_HALF_DOWN — HalfTowardsZero, а не TowardsZero. Для точных десятичных расчётов сам переход с int-константы на enum не устраняет погрешность float.

Сравните: round, ceil, floor. Выбор по задаче.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.