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.
Базовый пример
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.