W3docs

log10()

Функция log10() в PHP вычисляет десятичный логарифм числа. Синтаксис, крайние случаи и примеры использования.

Функция log10() возвращает десятичный логарифм числа — то есть степень, в которую нужно возвести 10, чтобы получить это число. Поскольку log10(1000) равно 3 (так как 10³ = 1000), это естественный инструмент для работы с порядками величин: децибелы, шкала pH, шкала Рихтера и вопрос «сколько цифр в этом числе».

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

Синтаксис

log10(float $num): float
  • $num — значение, десятичный логарифм которого требуется найти. Должно быть положительным числом.
  • Возвращаемое значение — десятичный логарифм $num в виде float.

Определяющее соотношение простое: если log10($x) равно $y, то pow(10, $y) равно $x.

Базовый пример

php— editable, runs on the server

log10(100) равно 2, потому что 10² = 100. Аналогично log10(1000) равно 3, а log10(1) равно 0, поскольку любое число в нулевой степени равно 1.

Диапазон значений

Результат увеличивается ровно на 1 каждый раз, когда аргумент умножается на 10, и становится отрицательным для значений меньше 1:

<?php
echo log10(1000) . "\n";  // 3
echo log10(100)  . "\n";  // 2
echo log10(10)   . "\n";  // 1
echo log10(1)    . "\n";  // 0
echo log10(0.1)  . "\n";  // -1
echo log10(0.001) . "\n"; // -3
echo log10(50)   . "\n";  // 1.6989700043360187
?>

Обратите внимание, что log10(50) находится между 1 и 2, поскольку 50 расположено между 10¹ и 10².

Крайние случаи: ноль и отрицательные числа

Логарифм нуля не определён (нельзя получить 0, возводя 10 в какую-либо степень), а логарифмы отрицательных чисел не являются вещественными. PHP сигнализирует об этом специальными значениями типа float вместо возбуждения исключения:

<?php
var_dump(log10(0));   // float(-INF)
var_dump(log10(-5));  // float(NAN)
?>

Защититесь от таких ситуаций, если аргумент задаётся пользователем:

<?php
function safeLog10($n) {
    if ($n <= 0) {
        return null; // log10 is only defined for positive numbers
    }
    return log10($n);
}

var_dump(safeLog10(100)); // float(2)
var_dump(safeLog10(0));   // NULL
?>

Также можно проверить результат с помощью is_nan() и is_infinite(), если предпочтительнее сначала вызвать log10(), а затем проверить возвращённое значение.

log10() vs. log()

Обе функции вычисляют логарифмы, но с разными основаниями:

  • log10($x) — всегда основание 10. Эквивалентно log($x, 10).
  • log($x) — основание e (натуральный логарифм, ≈ 2.718) при вызове с одним аргументом.
  • log($x, $base) — логарифм с любым переданным основанием.

Таким образом, log10($x) и log($x, 10) возвращают одинаковое значение; log10() — просто более быстрое и наглядное сокращение для распространённого случая основания 10. Для логарифмов по основанию 2 используйте log($x, 2). Смотрите log() для универсальной версии и log1p() для точного вычисления логарифмов значений, близких к 1.

Практическое применение: подсчёт цифр

Распространённый приём: количество цифр в положительном целом числе равно floor(log10($n)) + 1.

<?php
function digitCount($n) {
    return (int) floor(log10($n)) + 1;
}

echo digitCount(7) . "\n";      // 1
echo digitCount(100) . "\n";    // 3
echo digitCount(99999) . "\n";  // 5
?>

Это работает потому, что log10() непосредственно сообщает порядок величины числа.

Заключение

log10() возвращает десятичный логарифм числа — показатель степени, в которую нужно возвести 10, чтобы получить это значение. Запомните три вещи: результат увеличивается на 1 при каждом умножении аргумента на 10, аргумент должен быть положительным (0 даёт -INF, отрицательные числа — NAN), а log10($x) идентично log($x, 10). Для других оснований используйте log(), а полный набор математических функций изучите в разделе PHP Math.

Практика

Практика
Что возвращает функция PHP log10() для log10(1000)?
Что возвращает функция PHP log10() для log10(1000)?
Was this page helpful?