Логарифмирование и потенцирование 🔁
Открой исходники любой библиотеки машинного обучения и найди место, где считается правдоподобие модели. Ты не увидишь там произведения вероятностей. Никогда. Хотя по формуле теории вероятностей правдоподобие выборки — это именно произведение: $L = p_1 \cdot p_2 \cdot \ldots \cdot p_n$. В коде вместо этого всегда стоит сумма логарифмов: logL = sum(np.log(p)). И это не стилистическая причуда программистов, а вопрос жизни и смерти вычисления.
Причина простая до неприличия. Возьми тысячу вероятностей по $0{,}001$ каждая — вполне обычная ситуация для языковой модели со словарём в тысячу токенов, которая пока ничему не научилась. Их произведение равно $10^{-3000}$. Самый маленький ненулевой double во float64 — примерно $10^{-308}$. То есть истинное значение правдоподобия меньше машинного нуля почти в десять раз по числу порядков. Компьютер честно вернёт 0.0, и вся дальнейшая математика — деления, отношения, градиенты — превратится в nan. А сумма логарифмов тех же самых вероятностей равна $1000 \cdot \ln 0{,}001 \approx -6907{,}76$. Абсолютно нормальное число, которое float64 хранит с точностью до пятнадцатого знака.
Приём, который здесь спасает вычисление, называется логарифмирование. Это не новая формула и не новое свойство логарифма — это действие: взять логарифм от обеих частей равенства или от целого выражения и перейти в «мир сумм», где произведения становятся сложениями, степени — умножениями, а корни — делениями. Обратное действие — потенцирование — возвращает нас назад, в «мир произведений». Пара взаимно обратных операций, как «надеть перчатки» и «снять перчатки», только с одним неприятным нюансом: назад возвращаешься не всегда точно туда, откуда ушёл.
Именно этот нюанс и делает тему по-настоящему важной. Логарифмирование — операция аккуратная: она либо сохраняет область допустимых значений, либо сужает её. Потенцирование — операция расширяющая: оно разрешает то, что раньше было запрещено, и потому рождает посторонние корни. Ты уже встречал это в уроке про логарифмические уравнения, но там это было побочным эффектом. Здесь мы возьмём оба действия как самостоятельный инструмент: научимся логарифмировать громоздкие выражения, решать логарифмированием уравнения, которые иначе не поддаются, вычислять числа с сотнями знаков через таблицу логарифмов — и разберём, почему в регрессии логарифмируют целевую переменную и какая ловушка ждёт при обратном потенцировании прогноза.
🎯 Ты узнаешь:
- Как логарифмирование превращает произведение в сумму, степень в множитель, а корень в деление — и при каком условии этот переход законен
- Чем потенцирование принципиально опаснее логарифмирования: почему оно расширяет ОДЗ и откуда после него берутся посторонние корни
- Как считать громоздкие выражения, число цифр в $2^{1000}$ и первую цифру $3^{100}$ через логарифмы — техника, которой пользовались триста лет до появления калькуляторов
- Как логарифмирование решает уравнения вида $x^{\lg x} = 10000$ и $2^{x+1} = 3^{x}$, где обычные приёмы бессильны
- Почему в ML произведение вероятностей всегда логарифмируют, что такое трюк log-sum-exp и какое смещение возникает при обратном потенцировании прогноза регрессии
История: откуда это взялось?
Логарифм родился не как функция, а именно как действие над числами — и это важно для понимания темы. В 1614 году шотландский барон Джон Непер опубликовал «Mirifici Logarithmorum Canonis Descriptio», где предложил способ заменить умножение сложением. Его идея была чисто вычислительной: если каждому числу сопоставить его «логарифм», то произведению чисел будет соответствовать сумма логарифмов, а значит перемножение шестизначных чисел сводится к их сложению плюс два похода в таблицу. Непер потратил на составление таблиц двадцать лет.
Следующий шаг сделал английский профессор Генри Бриггс. Он приехал к Неперу в Эдинбург в 1615 году, и они вдвоём решили, что удобнее брать основание 10 — тогда логарифмы чисел, отличающихся в 10 раз, будут отличаться ровно на единицу, и таблицу достаточно составить для чисел от 1 до 10. В 1617 году Бриггс выпустил «Logarithmorum Chilias Prima» — таблицу десятичных логарифмов первой тысячи чисел с точностью до четырнадцатого знака, а в 1624-м — «Arithmetica Logarithmica» с логарифмами тридцати тысяч чисел. Каждое значение он вычислял вручную, многократным извлечением квадратных корней. Одновременно с таблицами логарифмов появились таблицы антилогарифмов — обратного перехода от логарифма к самому числу. Именно этот обратный переход и назвали потенцированием (от латинского potentia — степень).
Практическая схема расчётов на следующие 350 лет выглядела так: прологарифмировать выражение (превратив умножения, деления, степени и корни в сложения, вычитания, умножения и деления на маленькие числа), выполнить простую арифметику над логарифмами, потенцировать результат по таблице антилогарифмов. В 1622 году Уильям Отред воплотил ту же идею в железе: логарифмическая линейка — это две линейки с логарифмической шкалой, и сложение отрезков на них физически выполняет умножение чисел. Инженеры и физики считали на ней вплоть до 1970-х; траектория «Аполлона-13» пересчитывалась в том числе на логарифмических линейках, а на Луну люди летали ещё до того, как карманный калькулятор стал массовым.
Казалось бы, с приходом компьютеров техника логарифмирования должна была умереть — машина умножает миллиарды чисел в секунду и в таблицах не нуждается. Но случилось ровно наоборот: логарифмирование вернулось, причём в самое сердце вычислений. Компьютерные числа с плавающей точкой имеют ограниченный диапазон, и произведение тысяч маленьких вероятностей обнуляется, а произведение тысяч больших — переполняется. Единственный способ работать с такими произведениями — тот же самый, что предложил Непер: перейти к логарифмам, сложить, и потенцировать только в самом конце, если вообще понадобится. Так рассуждение четырёхсотлетней давности стало стандартом промышленного кода: logsumexp, log_softmax, log_prob — эти функции есть в каждом ML-фреймворке, и все они — прямые потомки таблиц Бриггса.
Логарифмирование выражения: переход в мир сумм
Интуиция
Представь, что у тебя есть два способа описывать одно и то же число: «обычный» и «логарифмический». В обычном мире числа перемножаются, делятся, возводятся в степень. В логарифмическом мире те же самые операции выглядят иначе — на порядок проще:
$$\text{умножение} \to \text{сложение}, \quad \text{деление} \to \text{вычитание}$$$$\text{возведение в степень} \to \text{умножение}, \quad \text{извлечение корня} \to \text{деление}$$
Каждая операция «понижается на ступеньку» по сложности. Это как перевод из одной системы единиц в другую: сама величина не меняется, но считать в новых единицах может оказаться радикально удобнее. Логарифмирование — это и есть такой перевод.
Логарифмировать выражение — значит взять от него логарифм и раскрыть все свойства логарифма так, чтобы вместо одного логарифма от громоздкой конструкции получилась сумма логарифмов от простых кусочков. Все инструменты для этого у тебя уже есть — это те самые свойства из урока 117:
$$\log_a (MN) = \log_a M + \log_a N, \qquad \log_a \frac{M}{N} = \log_a M - \log_a N$$$$\log_a M^k = k\log_a M, \qquad \log_a \sqrt[n]{M} = \frac{1}{n}\log_a M$$
Новое здесь — не формулы, а взгляд на них как на направление движения. Раньше ты применял их в обе стороны как придётся. Теперь мы разделяем: движение «разворачиваем в сумму» — это логарифмирование, движение «сворачиваем обратно» — потенцирование. И у этих двух направлений принципиально разные свойства по части ОДЗ.
Определение: Логарифмированием выражения называется переход от выражения $P$ к выражению $\log_a P$ с последующим раскрытием по свойствам логарифма — так, что произведения превращаются в суммы, частные в разности, степени и корни в множители.
🚨 Ключевое условие законности. Формула $\log_a(MN) = \log_a M + \log_a N$ верна только когда $M > 0$ и $N > 0$, а не когда просто $MN > 0$. Например, при $M = N = -2$ произведение $MN = 4$ положительно и $\log_2 4 = 2$ существует, но $\log_2(-2)$ не существует вовсе. Поэтому перед логарифмированием буквенного выражения всегда фиксируем: все множители строго положительны. В школьных задачах это обычно оговаривают явно («при $a>0$, $b>0$»), а в прикладных задачах положительность гарантирует смысл величины — вероятность, цена, масса, длина.
Основание выбираем под задачу. Для ручных вычислений — десятичный логарифм $\lg$ (таблицы и порядок числа). Для ML и математики — натуральный $\ln$. Для задач со степенями двойки — $\log_2$. Правило простое: бери основанием то число, степени которого чаще всего встречаются в выражении, — тогда большинство слагаемых окажутся целыми.
Примеры с разбором
Пример 1 (простой): прологарифмируй по основанию 10 выражение $P = \dfrac{a^5 b^3}{c^2}$, где $a, b, c > 0$
Решение:
Шаг 1. Берём десятичный логарифм от обеих частей:
$$\lg P = \lg \frac{a^5 b^3}{c^2}$$Шаг 2. Логарифм частного — разность логарифмов:
$$\lg P = \lg (a^5 b^3) - \lg c^2$$Шаг 3. Логарифм произведения — сумма логарифмов:
$$\lg P = \lg a^5 + \lg b^3 - \lg c^2$$Шаг 4. Выносим показатели степеней вперёд:
$$\lg P = 5\lg a + 3\lg b - 2\lg c$$Обрати внимание, что получилось: было выражение с двумя умножениями, одним делением и тремя возведениями в степень. Стало — выражение с двумя сложениями и тремя умножениями на маленькие числа. Ровно то, ради чего Непер всё и затевал.
Ответ: $\lg P = 5\lg a + 3\lg b - 2\lg c$
Пример 2 (средний): прологарифмируй натуральным логарифмом $Q = \sqrt[4]{\dfrac{x^3 y}{z^5}}$, где $x, y, z > 0$
Решение:
Шаг 1. Корень четвёртой степени — это степень $\frac14$. Перепишем и возьмём логарифм:
$$\ln Q = \ln \left(\frac{x^3 y}{z^5}\right)^{1/4} = \frac{1}{4}\ln \frac{x^3 y}{z^5}$$Общий множитель $\frac14$ вынесли сразу — это самый частый порядок действий: сначала «снимаем» внешнюю степень или корень, потом разбираемся с внутренностью.
Шаг 2. Раскрываем частное:
$$\ln Q = \frac{1}{4}\left(\ln(x^3 y) - \ln z^5\right)$$Шаг 3. Раскрываем произведение и выносим показатели:
$$\ln Q = \frac{1}{4}\left(3\ln x + \ln y - 5\ln z\right)$$Шаг 4. Раскроем скобку, чтобы получить сумму в чистом виде:
$$\ln Q = \frac{3}{4}\ln x + \frac{1}{4}\ln y - \frac{5}{4}\ln z$$Проверим наш ответ на конкретных числах. Возьмём $x = y = z = e$. Тогда $Q = \sqrt[4]{\frac{e^3 \cdot e}{e^5}} = \sqrt[4]{e^{-1}} = e^{-1/4}$, значит $\ln Q = -0{,}25$. По нашей формуле: $\frac34 \cdot 1 + \frac14 \cdot 1 - \frac54 \cdot 1 = \frac{3 + 1 - 5}{4} = -\frac14$ ✅
Ответ: $\ln Q = \dfrac{3}{4}\ln x + \dfrac{1}{4}\ln y - \dfrac{5}{4}\ln z$
Пример 3 (сложный): зная $\lg 2 \approx 0{,}3010$, $\lg 3 \approx 0{,}4771$, $\lg 7 \approx 0{,}8451$, найди $\lg \sqrt{\dfrac{63}{40}}$
Решение:
Тут логарифмирование работает не как преобразование буквенного выражения, а как вычислительный приём: у нас есть логарифмы трёх «кирпичиков» — 2, 3 и 7 — и любое число, разложимое на них, мы теперь можем прологарифмировать без калькулятора.
Шаг 1. Снимаем корень:
$$\lg \sqrt{\frac{63}{40}} = \frac{1}{2}\lg \frac{63}{40} = \frac{1}{2}\left(\lg 63 - \lg 40\right)$$Шаг 2. Раскладываем числа на простые множители: $63 = 9 \cdot 7 = 3^2 \cdot 7$, а $40 = 8 \cdot 5 = 2^3 \cdot 5$.
Шаг 3. Логарифмируем каждое:
$$\lg 63 = \lg(3^2 \cdot 7) = 2\lg 3 + \lg 7 = 2 \cdot 0{,}4771 + 0{,}8451 = 0{,}9542 + 0{,}8451 = 1{,}7993$$Для сорока нам нужен $\lg 5$, а его в условии нет. Но пятёрка — это $\frac{10}{2}$, и это самый полезный трюк во всех задачах такого типа:
$$\lg 5 = \lg \frac{10}{2} = \lg 10 - \lg 2 = 1 - 0{,}3010 = 0{,}6990$$$$\lg 40 = 3\lg 2 + \lg 5 = 3 \cdot 0{,}3010 + 0{,}6990 = 0{,}9030 + 0{,}6990 = 1{,}6020$$Шаг 4. Собираем ответ:
$$\lg \sqrt{\frac{63}{40}} = \frac{1}{2}(1{,}7993 - 1{,}6020) = \frac{1}{2} \cdot 0{,}1973 = 0{,}09865$$Проверим наш ответ. $\frac{63}{40} = 1{,}575$, корень из него $\approx 1{,}2550$, и его десятичный логарифм действительно $\approx 0{,}0986$ ✅
Ответ: $\lg \sqrt{\dfrac{63}{40}} \approx 0{,}0986$
Почему это важно
Логарифмирование выражения — первый шаг любой работы с величинами, которые перемножаются. В статистике так устроено правдоподобие, в финансах — доходность за несколько периодов, в физике — коэффициенты усиления каскада. Везде, где итог получается умножением многих множителей, логарифмирование превращает задачу об умножении в задачу о сложении, а сложение и человек, и компьютер выполняют устойчивее: у суммы нет ни переполнения, ни обнуления, ни накопления относительной погрешности так, как у длинного произведения.
Есть и вторая причина, чисто «человеческая». В сумме сразу видно, какое слагаемое главное. В формуле $\lg P = 5\lg a + 3\lg b - 2\lg c$ мгновенно понятно, что $a$ влияет на результат сильнее всех, а $c$ — тянет его вниз. В исходном виде $\frac{a^5 b^3}{c^2}$ это тоже верно, но не так наглядно. Именно поэтому в анализе данных чувствительность модели к параметрам почти всегда смотрят в логарифмическом масштабе — там вклад каждого фактора становится обычным слагаемым.
Потенцирование: обратный ход и его цена
Интуиция
Потенцирование — это ровно обратное действие: у тебя есть логарифм числа, а ты хочешь само число. У тебя есть сумма логарифмов, а ты хочешь свернуть её обратно в одно выражение.
$$\text{сложение} \to \text{умножение}, \quad \text{вычитание} \to \text{деление}$$$$\text{умножение на } k \to \text{возведение в степень } k$$
Формально потенцирование — это применение показательной функции к обеим частям: если $\log_a P = t$, то $P = a^t$. Никакой новой математики: просто определение логарифма, прочитанное справа налево.
Представь это как сборку и разборку. Логарифмирование разбирает выражение на детали — отдельные логарифмы, соединённые плюсами и минусами. Потенцирование собирает детали обратно. И вот тут возникает та самая асимметрия, из-за которой вся тема и живёт.
Разобрать можно только то, что существует. Чтобы написать $\log_a M + \log_a N$, нужно, чтобы существовал и $\log_a M$, и $\log_a N$, то есть чтобы оба числа были положительны. Собрать можно и то, чего не было. Выражение $\log_a(MN)$ существует уже при условии $MN > 0$ — а это выполняется, в частности, когда оба множителя отрицательны. Значит, свёртка суммы в один логарифм добавляет к области допустимых значений случай «оба минус», которого в исходном выражении не было.
Отсюда главное правило урока:
Определение: Потенцированием называется переход от равенства логарифмов к равенству их аргументов ($\log_a M = \log_a N \Rightarrow M = N$) или свёртка суммы логарифмов в логарифм произведения. Потенцирование не сужает область допустимых значений и, как правило, расширяет её — поэтому после потенцирования корни обязательно проверяются подстановкой в исходное уравнение.
Сравни два направления:
| Действие | Что делает с выражением | Что делает с ОДЗ | Чем грозит |
|---|---|---|---|
| Логарифмирование $\log_a(MN) \to \log_a M + \log_a N$ | разворачивает в сумму | сужает (требует $M>0$ и $N>0$) | потеря корней |
| Потенцирование $\log_a M + \log_a N \to \log_a(MN)$ | сворачивает в произведение | расширяет (хватит $MN>0$) | посторонние корни |
Обе беды лечатся по-разному, и это принципиально. Посторонние корни лечатся проверкой: подставил в исходное уравнение — увидел, что не подходит, вычеркнул. Потерянные корни проверкой не лечатся никак: их уже нет в ответе, и подставлять нечего. Поэтому в уравнениях чаще идут в сторону расширения (потенцируют) и потом фильтруют — это безопаснее.
Примеры с разбором
Пример 4 (простой): найди $A$, если $\lg A = 3\lg 2 + 2\lg 5$
Решение:
Шаг 1. Загоняем коэффициенты обратно в показатели:
$$\lg A = \lg 2^3 + \lg 5^2 = \lg 8 + \lg 25$$Шаг 2. Сворачиваем сумму логарифмов в логарифм произведения:
$$\lg A = \lg (8 \cdot 25) = \lg 200$$Шаг 3. Логарифмическая функция строго монотонна, значит из равенства логарифмов следует равенство аргументов:
$$A = 200$$Ответ: $A = 200$
Пример 5 (средний): выполни потенцирование: $\log_2 A = 3 + \dfrac{1}{2}\log_2 x - 2\log_2 y$, где $x, y > 0$
Решение:
Шаг 1. Свободное число превращаем в логарифм по тому же основанию. Тройка — это $\log_2 8$, потому что $2^3 = 8$:
$$\log_2 A = \log_2 8 + \frac{1}{2}\log_2 x - 2\log_2 y$$Шаг 2. Загоняем коэффициенты в показатели:
$$\log_2 A = \log_2 8 + \log_2 x^{1/2} - \log_2 y^2 = \log_2 8 + \log_2 \sqrt{x} - \log_2 y^2$$Шаг 3. Сумма — в произведение, разность — в частное:
$$\log_2 A = \log_2 \frac{8\sqrt{x}}{y^2}$$Шаг 4. Снимаем логарифмы:
$$A = \frac{8\sqrt{x}}{y^2}$$Проверим наш ответ. Возьмём $x = 4$, $y = 2$. По формуле: $A = \frac{8 \cdot 2}{4} = 4$, значит $\log_2 A = 2$. По исходному выражению: $3 + \frac12 \log_2 4 - 2\log_2 2 = 3 + \frac12 \cdot 2 - 2 \cdot 1 = 3 + 1 - 2 = 2$ ✅
Ответ: $A = \dfrac{8\sqrt{x}}{y^2}$
Пример 6 (сложный): реши уравнение $\lg(x-2) + \lg(x-5) = \lg 4$ и покажи, где именно рождается посторонний корень
Решение:
Шаг 1. Честная ОДЗ исходного уравнения — система:
$$\begin{cases} x - 2 > 0 \\ x - 5 > 0 \end{cases} \Rightarrow \begin{cases} x > 2 \\ x > 5 \end{cases} \Rightarrow x > 5$$Оба логарифма должны существовать по отдельности, поэтому берём пересечение, а не объединение.
Шаг 2. Потенцируем — сворачиваем левую часть:
$$\lg\big((x-2)(x-5)\big) = \lg 4$$Вот здесь и происходит расширение. У нового уравнения условие всего одно: $(x-2)(x-5) > 0$, то есть $x < 2$ или $x > 5$. Кусок $x < 2$ — это новая, «незаконная» территория, которой в исходной задаче не было: там оба множителя отрицательны, их произведение положительно, логарифм от произведения существует — а логарифмов от самих множителей не существует.
Шаг 3. Снимаем логарифмы и решаем:
$$(x-2)(x-5) = 4$$$$x^2 - 7x + 10 = 4$$
$$x^2 - 7x + 6 = 0$$
$D = 49 - 24 = 25$, $\sqrt{D} = 5$, корни $x_{1,2} = \dfrac{7 \pm 5}{2}$: $x_1 = 6$, $x_2 = 1$.
Шаг 4. Фильтруем по ОДЗ ($x > 5$): корень $x = 6$ подходит, корень $x = 1$ — нет.
Проверка $x = 6$: $\lg 4 + \lg 1 = \lg 4 + 0 = \lg 4$ ✅ Проверка $x = 1$: $\lg(1 - 2) = \lg(-1)$ — не существует ❌ А в потенцированном уравнении он проходит: $(1-2)(1-5) = (-1)(-4) = 4$ ✅ — вот наглядное доказательство, что уравнения разные.
Ответ: $x = 6$
📌 Заметь: корень $x=1$ — это не ошибка арифметики. Арифметика безупречна. Это корень другого уравнения, в которое мы незаметно подменили исходное, применив формулу «в расширяющую сторону».
Почему это важно
Асимметрия логарифмирования и потенцирования — это частный случай очень общего принципа: преобразование, которое делает выражение «более определённым», меняет задачу. Тот же механизм работает при возведении уравнения в квадрат (появляются корни с неправильным знаком), при умножении на выражение с переменной (появляется корень из нуля этого выражения), при сокращении дроби (корень наоборот теряется).
В программировании это ровно та же дисциплина, что и проверка предусловий. Функция log(x) для отрицательного x вернёт nan, и если ты вычислил log(a) + log(b) — код упадёт честно и сразу. А если ты «оптимизировал» и написал log(a*b) — при обоих отрицательных всё посчитается без единой ошибки, и ты получишь красивое неверное число, которое поедет дальше по пайплайну. Такие баги ищут неделями. Математическая привычка спрашивать «а не расширил ли я область?» — это ровно та же привычка, что и «а проверил ли я входные данные до того, как их использовать».
Логарифмирование равенства и неравенства
Интуиция
Теперь перейдём от выражений к уравнениям. Основной вопрос: когда из $A = B$ можно сделать $\log_a A = \log_a B$, ничего не сломав?
Ответ даёт строгая монотонность логарифмической функции. Строгая монотонность значит, что разным значениям аргумента соответствуют разные значения функции: если $A \ne B$ (и оба положительны), то и $\log_a A \ne \log_a B$. Значит логарифмирование не склеивает разные числа в одно — информация не теряется. И оно ничего не добавляет: у каждого логарифма ровно один аргумент. Получается равносильный переход.
Определение: Если $A > 0$ и $B > 0$, то при $a>0$, $a \ne 1$ равенство $A = B$ равносильно равенству $\log_a A = \log_a B$. Логарифмирование равенства с положительными частями — равносильное преобразование: оно не даёт ни посторонних, ни потерянных корней.
🚨 Условие положительности обеих частей нельзя ослабить. Классический контрпример: равенство $(-2)^2 = 2^2$ верно, но прологарифмировать «почленно» внутренности нельзя — $\lg(-2)$ не существует. Именно на этой ошибке в XVIII веке споткнулся Иоганн Бернулли, доказывавший, что $\log(-x) = \log x$.
Для неравенств добавляется поворот, знакомый по уроку 121:
Определение: Пусть $A > 0$, $B > 0$. Тогда при $a > 1$ неравенство $A < B$ равносильно $\log_a A < \log_a B$ (знак сохраняется), а при $0 < a < 1$ — равносильно $\log_a A > \log_a B$ (знак меняется на противоположный).
На практике для сравнения чисел почти всегда берут основание больше единицы ($\lg$, $\ln$, $\log_2$) именно чтобы не думать о перевороте знака.
Когда логарифмирование уравнения — это то, что нужно? Три ситуации:
- Неизвестная сидит в показателе степени: $3^x = 7$. Логарифм «спускает» её вниз.
- Неизвестная сидит и в основании, и в показателе одновременно: $x^{\lg x} = 10000$.
- В уравнении разные основания степеней, к общему основанию не сводимые: $2^{x+1} = 3^x$.
Примеры с разбором
Пример 7 (простой): реши уравнение $3^x = 5$
Решение:
Шаг 1. Обе части положительны: $3^x > 0$ при любом $x$, и $5 > 0$. Логарифмировать законно.
Шаг 2. Логарифмируем по основанию 3 (чтобы слева получилось совсем просто):
$$\log_3 3^x = \log_3 5$$Шаг 3. Выносим показатель: $x \log_3 3 = x \cdot 1 = x$. Значит
$$x = \log_3 5$$Шаг 4. Численно, через смену основания: $x = \dfrac{\ln 5}{\ln 3} \approx \dfrac{1{,}6094}{1{,}0986} \approx 1{,}465$.
Проверим наш ответ: $3^{1{,}465} \approx 5{,}00$ ✅
Ответ: $x = \log_3 5 \approx 1{,}465$
Пример 8 (средний): реши уравнение $2^{x+1} = 3^{x}$
Решение:
Здесь основания разные и одно через другое целой степенью не выражается — сведение к общему основанию не сработает. Логарифмирование — единственный путь.
Шаг 1. Обе части положительны при любом $x$ (показательная функция всегда больше нуля), логарифмируем. Основание возьмём натуральное — оно симметрично относительно обеих сторон:
$$\ln 2^{x+1} = \ln 3^{x}$$Шаг 2. Выносим показатели:
$$(x+1)\ln 2 = x \ln 3$$Шаг 3. Раскрываем скобку и собираем $x$ в одну сторону:
$$x\ln 2 + \ln 2 = x\ln 3$$$$\ln 2 = x\ln 3 - x\ln 2 = x(\ln 3 - \ln 2)$$
Шаг 4. Выражаем $x$:
$$x = \frac{\ln 2}{\ln 3 - \ln 2} = \frac{\ln 2}{\ln \frac{3}{2}} = \log_{1{,}5} 2$$Шаг 5. Численно: $\ln 2 \approx 0{,}6931$, $\ln 1{,}5 \approx 0{,}4055$, значит $x \approx 1{,}7095$.
Проверим наш ответ: слева $2^{2{,}7095} \approx 6{,}54$, справа $3^{1{,}7095} \approx 6{,}54$ ✅
Ответ: $x = \log_{1{,}5} 2 \approx 1{,}71$
📌 Общий рецепт для $a^{f(x)} = b^{g(x)}$: логарифмируешь по любому удобному основанию, получаешь $f(x)\log a = g(x)\log b$ — обычное уравнение относительно $x$, где логарифмы играют роль числовых коэффициентов. Никакой магии, просто $\log a$ и $\log b$ — это числа.
Пример 9 (сложный): реши уравнение $5^{x} \cdot 8^{\frac{x-1}{x}} = 500$
Решение:
Шаг 1. ОДЗ: показатель второй степени содержит дробь, значит $x \ne 0$. Обе части положительны — логарифмировать можно.
Шаг 2. Приведём всё к простым основаниям: $8 = 2^3$, $500 = 4 \cdot 125 = 2^2 \cdot 5^3$.
$$5^x \cdot 2^{\frac{3(x-1)}{x}} = 2^2 \cdot 5^3$$Шаг 3. Логарифмируем по основанию 2:
$$x\log_2 5 + \frac{3(x-1)}{x} = 2 + 3\log_2 5$$Шаг 4. Собираем всё в одну сторону и группируем:
$$x\log_2 5 - 3\log_2 5 + \frac{3(x-1)}{x} - 2 = 0$$$$(x - 3)\log_2 5 + \frac{3x - 3 - 2x}{x} = 0$$
$$(x - 3)\log_2 5 + \frac{x - 3}{x} = 0$$
Дробь чудесным образом дала тот же множитель $(x-3)$ — это и есть замысел задачи.
Шаг 5. Выносим общий множитель:
$$(x - 3)\left(\log_2 5 + \frac{1}{x}\right) = 0$$Шаг 6. Произведение равно нулю, когда один из множителей ноль:
- $x - 3 = 0 \Rightarrow x = 3$
- $\log_2 5 + \dfrac{1}{x} = 0 \Rightarrow \dfrac{1}{x} = -\log_2 5 \Rightarrow x = -\dfrac{1}{\log_2 5} = -\log_5 2$
(Здесь использовано следствие $\frac{1}{\log_2 5} = \log_5 2$ из формулы смены основания.)
Шаг 7. Оба корня не равны нулю — ОДЗ выполнена.
Проверка $x = 3$: $5^3 \cdot 8^{\frac{2}{3}} = 125 \cdot 4 = 500$ ✅ Проверка $x = -\log_5 2 \approx -0{,}4307$: численно $5^{-0{,}4307} \approx 0{,}5$, показатель второй степени $\frac{-0{,}4307 - 1}{-0{,}4307} \approx 3{,}3219$, и $8^{3{,}3219} \approx 1000$; произведение $\approx 0{,}5 \cdot 1000 = 500$ ✅
Ответ: $x = 3$, $x = -\log_5 2$
Почему это важно
Логарифмирование уравнения — базовый приём везде, где неизвестная стоит в показателе. Именно так решаются задачи «через сколько лет вклад удвоится», «за сколько периодов полураспада останется 1% вещества», «через сколько эпох learning rate с затуханием $\lambda$ упадёт в десять раз». Все эти вопросы имеют вид $a^t = b$, и ответ на них — логарифм.
Есть и более тонкое применение, важное для ML. Максимизация функции правдоподобия $L(\theta)$ и максимизация $\ln L(\theta)$ — это одна и та же задача, потому что логарифм строго возрастает: он не двигает точку максимума, а только меняет значения. Логарифмирование целевой функции — не приближение и не упрощение, а равносильный переход, полностью законный ровно по тем же причинам, по которым законно логарифмирование уравнения: строгая монотонность плюс положительность. Каждый раз, когда в статье пишут «для удобства перейдём к логарифмическому правдоподобию», за этим стоит именно эта теорема.
Вычисление громоздких выражений: техника доцифровой эпохи
Интуиция
Представь, что калькулятора нет. Совсем. А посчитать надо вот это:
$$A = \sqrt[5]{\frac{372^3 \cdot 0{,}0418}{58{,}7}}$$В лоб это означает: возвести трёхзначное число в куб (два умножения в столбик), умножить на дробь, разделить на дробь, извлечь корень пятой степени (а как?!). Часа два работы и почти гарантированная ошибка.
Через логарифмирование задача превращается в четыре строчки арифметики. И тут пригодится одна структурная особенность десятичного логарифма, ради которой Бриггс и выбрал основание 10.
Любое положительное число можно записать как $N = m \cdot 10^k$, где $1 \le m < 10$ — это стандартный вид. Тогда
$$\lg N = \lg m + k$$Число $k$ (целая часть) называется характеристикой и отвечает за порядок числа — сколько в нём разрядов. Число $\lg m$ (дробная часть, от 0 до 1) называется мантиссой и отвечает за «сами цифры». Ключевой факт: у чисел $3{,}72$; $37{,}2$; $372$; $0{,}0372$ мантисса одна и та же, различаются только характеристики. Поэтому таблица логарифмов нужна была только для чисел от 1 до 10 — всё остальное получалось прибавлением целого числа.
Определение: Для $N = m\cdot 10^k$, где $1 \le m < 10$: целое число $k$ — характеристика $\lg N$, дробное $\lg m \in [0;1)$ — мантисса. Характеристика определяет порядок числа (число цифр до запятой), мантисса — последовательность его значащих цифр.
Отсюда два фокуса, которые работают до сих пор и в эпоху компьютеров — потому что компьютеру тоже негде хранить число из тысячи цифр:
- Число цифр в целом числе $N$ равно $\lfloor \lg N \rfloor + 1$.
- Первые значащие цифры числа $N$ определяются дробной частью $\lg N$: если $\{\lg N\} = f$, то $N$ начинается с цифр числа $10^f$.
Примеры с разбором
Пример 10 (средний): вычисли $A = \sqrt[5]{\dfrac{372^3 \cdot 0{,}0418}{58{,}7}}$, пользуясь таблицей: $\lg 3{,}72 = 0{,}5705$, $\lg 4{,}18 = 0{,}6212$, $\lg 5{,}87 = 0{,}7686$
Решение:
Шаг 1. Логарифмируем всё выражение. Все числа положительны — переход законен:
$$\lg A = \frac{1}{5}\left(3\lg 372 + \lg 0{,}0418 - \lg 58{,}7\right)$$Шаг 2. Раскладываем каждое число на мантиссу и характеристику:
- $372 = 3{,}72 \cdot 10^2 \Rightarrow \lg 372 = 0{,}5705 + 2 = 2{,}5705$
- $0{,}0418 = 4{,}18 \cdot 10^{-2} \Rightarrow \lg 0{,}0418 = 0{,}6212 - 2 = -1{,}3788$
- $58{,}7 = 5{,}87 \cdot 10^1 \Rightarrow \lg 58{,}7 = 0{,}7686 + 1 = 1{,}7686$
Шаг 3. Считаем сумму — обычная арифметика с четырьмя знаками:
$$3 \cdot 2{,}5705 = 7{,}7115$$$$7{,}7115 - 1{,}3788 - 1{,}7686 = 4{,}5641$$
Шаг 4. Делим на 5 (это и есть «извлечение корня пятой степени»):
$$\lg A = \frac{4{,}5641}{5} = 0{,}9128$$Шаг 5. Потенцируем. Характеристика $0$, мантисса $0{,}9128$. По таблице антилогарифмов $10^{0{,}9128} \approx 8{,}181$. Характеристика ноль означает множитель $10^0 = 1$:
$$A \approx 8{,}18$$Проверим наш ответ современными средствами: $372^3 = 51\,478\,848$; умножаем на $0{,}0418$ — получаем $2\,151\,815{,}8$; делим на $58{,}7$ — получаем $36\,657$; корень пятой степени из этого $\approx 8{,}1815$ ✅
Обрати внимание на объём работы: вместо возведения в куб и извлечения корня пятой степени мы сделали одно умножение на 3, два вычитания и одно деление на 5. Вот за что Лаплас сказал, что логарифмы «удвоили жизнь астронома».
Ответ: $A \approx 8{,}18$
Пример 11 (средний): сколько цифр в десятичной записи числа $2^{1000}$?
Решение:
Число $2^{1000}$ выписать целиком невозможно — оно не поместится в строчку, и обычный int большинства языков его не хранит. Но нам нужно не само число, а его порядок, а порядок — это характеристика логарифма.
Шаг 1. Логарифмируем:
$$\lg 2^{1000} = 1000 \lg 2$$Шаг 2. Подставляем $\lg 2 \approx 0{,}30103$:
$$\lg 2^{1000} \approx 1000 \cdot 0{,}30103 = 301{,}03$$Шаг 3. Характеристика равна $301$. Значит $2^{1000} = m \cdot 10^{301}$, где $1 \le m < 10$ — то есть число начинается в 302-м разряде.
Шаг 4. По формуле: число цифр $= \lfloor \lg N\rfloor + 1 = 301 + 1 = 302$.
Проверим на маленьком примере, что формула верна: $\lg 1000 = 3$, цифр в 1000 — четыре, и $3 + 1 = 4$ ✅ Для $999$: $\lg 999 \approx 2{,}9996$, целая часть 2, цифр $2+1=3$ ✅
Ответ: 302 цифры
Пример 12 (сложный): с какой цифры начинается число $3^{100}$?
Решение:
Шаг 1. Логарифмируем: $\lg 3^{100} = 100 \lg 3 \approx 100 \cdot 0{,}477121 = 47{,}7121$.
Шаг 2. Разделяем на характеристику и мантиссу:
- характеристика $= 47$ — значит в числе 48 цифр;
- мантисса $= 0{,}7121$ — она и хранит информацию о самих цифрах.
Шаг 3. Потенцируем мантиссу. Нам нужно число $m$, у которого $\lg m = 0{,}7121$ и $1 \le m < 10$:
$$m = 10^{0{,}7121}$$Оценим без таблицы. Мы знаем ориентиры: $\lg 5 = 0{,}6990$ и $\lg 6 \approx 0{,}7782$. Наша мантисса $0{,}7121$ лежит между ними, причём заметно ближе к $\lg 5$. Значит $5 < m < 6$, то есть первая цифра — 5.
Шаг 4. Уточним: $10^{0{,}7121} \approx 5{,}154$. Значит $3^{100} \approx 5{,}154 \cdot 10^{47}$.
Проверим наш ответ: точное значение $3^{100} = 515\,377\,520\,732\,011\,331\,036\,461\,129\,765\,621\,272\,702\,107\,522\,001$ — начинается с 5154 и содержит 48 цифр ✅ Наша оценка попала в четыре значащие цифры, не выписав ни одной из сорока восьми.
Ответ: с цифры 5 (точнее, $3^{100} \approx 5{,}15 \cdot 10^{47}$)
📌 Этот приём — не только историческая экзотика. Ровно так библиотеки считают, например, число сочетаний $C_n^k$ для больших $n$: факториалы переполняют любой тип данных, поэтому вычисляют $\ln n! = \sum \ln i$, складывают-вычитают логарифмы и потенцируют только результат.
Почему это важно
Главный урок этого раздела не в том, как обходиться без калькулятора. Он в том, что логарифм разделяет число на порядок и на структуру — на «сколько нулей» и «какие цифры». В анализе данных это разделение критично.
Когда ты строишь гистограмму цен, зарплат, размеров городов или числа просмотров — данные обычно растянуты на несколько порядков: от десятков до миллионов. В линейном масштабе гистограмма выродится в один столбик у нуля и длинный пустой хвост. В логарифмическом масштабе она превращается во внятное, часто почти нормальное распределение, потому что логарифм сравнивает числа по отношению, а не по разности. Расстояние от 10 до 100 в логарифмах ровно такое же, как от 1000 до 10000 — и это, как правило, ровно то, что нужно: разница «в десять раз» одинаково значима на любом уровне.
Отсюда же берётся правило «логарифмируй признак, если он положительный и растянут на порядки» — одно из первых, которому учат в прикладном анализе данных. И правило «числа с плавающей точкой сами устроены как логарифм»: во float экспонента хранится отдельно от мантиссы — та же самая пара «характеристика + мантисса», которую придумал Бриггс в 1617 году, только по основанию 2.
Уравнения, которые решаются логарифмированием
Интуиция
Есть класс уравнений, где ни один стандартный приём не работает: неизвестная сидит одновременно в основании и в показателе.
$$x^{\lg x} = 10000, \qquad x^{\log_5 x} = \frac{125}{x^2}, \qquad x^{\log_2 x} = \frac{16}{x^3}$$Свести к одному основанию нельзя — основание переменное. Замена $t = \log_a x$ напрямую не проходит — сначала надо где-то этот логарифм найти. Приём один: прологарифмировать обе части. Логарифм спустит показатель вниз множителем, и вместо страшной конструкции получится квадратное уравнение относительно $\log_a x$.
Схема всегда одинаковая:
-
Записать ОДЗ: основание степени должно быть положительным, значит $x > 0$ (а если основание содержит $x$ под логарифмом — то же самое условие).
-
Прологарифмировать обе части по тому основанию, которое стоит в показателе.
-
Слева применить $\log_a x^{k} = k\log_a x$, справа разложить по свойствам.
-
Сделать замену $t = \log_a x$ — получится квадратное уравнение.
-
Решить, сделать обратную замену, проверить.
Второй класс — разные основания степеней: $a^{f(x)} = b^{g(x)}$. Здесь логарифмирование превращает уравнение в алгебраическое, где $\log a$ и $\log b$ работают просто числовыми коэффициентами. Мы уже видели это в примере 8; разберём вариант посложнее.
Примеры с разбором
Пример 13 (простой): реши уравнение $x^{\lg x} = 10000$
Решение:
Шаг 1. ОДЗ: в показателе стоит $\lg x$, значит $x > 0$. Обе части при этом положительны — логарифмировать законно.
Шаг 2. Логарифмируем по основанию 10 (потому что в показателе десятичный логарифм):
$$\lg\left(x^{\lg x}\right) = \lg 10000$$Шаг 3. Слева выносим показатель, справа $10000 = 10^4$:
$$\lg x \cdot \lg x = 4, \qquad \text{то есть} \qquad (\lg x)^2 = 4$$Шаг 4. Замена $t = \lg x$: $t^2 = 4$, значит $t = 2$ или $t = -2$.
Шаг 5. Обратная замена:
- $\lg x = 2 \Rightarrow x = 100$
- $\lg x = -2 \Rightarrow x = 0{,}01$
Проверка $x = 100$: $100^{\lg 100} = 100^2 = 10000$ ✅ Проверка $x = 0{,}01$: $\lg 0{,}01 = -2$, значит $0{,}01^{-2} = \dfrac{1}{0{,}0001} = 10000$ ✅
Ответ: $x = 100$, $x = 0{,}01$
📌 Не потеряй второй корень! Соблазн сказать «$\lg x = 2$, значит $x = 100$» и остановиться очень велик, но квадрат даёт два значения $t$, и оба дают законные $x > 0$.
Пример 14 (средний): реши уравнение $7^{x^2 - 1} = 11^{x - 1}$
Решение:
Шаг 1. Обе части положительны при любом $x$. Логарифмируем натуральным логарифмом:
$$(x^2 - 1)\ln 7 = (x - 1)\ln 11$$Шаг 2. Раскладываем $x^2 - 1 = (x-1)(x+1)$ и переносим всё влево:
$$(x-1)(x+1)\ln 7 - (x-1)\ln 11 = 0$$Шаг 3. Выносим общий множитель $(x-1)$:
$$(x - 1)\big[(x+1)\ln 7 - \ln 11\big] = 0$$Шаг 4. Приравниваем каждый множитель к нулю:
- $x - 1 = 0 \Rightarrow x_1 = 1$
- $(x+1)\ln 7 = \ln 11 \Rightarrow x + 1 = \dfrac{\ln 11}{\ln 7} = \log_7 11 \Rightarrow x_2 = \log_7 11 - 1$
Шаг 5. Численно: $\log_7 11 = \dfrac{2{,}3979}{1{,}9459} \approx 1{,}2323$, значит $x_2 \approx 0{,}2323$.
Проверка $x = 1$: слева $7^{0} = 1$, справа $11^{0} = 1$ ✅ Проверка $x \approx 0{,}2323$: слева $7^{0{,}2323^2 - 1} = 7^{-0{,}9460} \approx 0{,}1587$, справа $11^{0{,}2323 - 1} = 11^{-0{,}7677} \approx 0{,}1587$ ✅
Ответ: $x = 1$, $x = \log_7 11 - 1$
📌 Типичная ловушка в таких задачах — поделить обе части на $(x-1)$ и потерять корень $x=1$. Всегда выноси множитель, а не сокращай на него.
Пример 15 (сложный): реши уравнение $x^{\log_5 x} = \dfrac{125}{x^2}$
Решение:
Шаг 1. ОДЗ: $x > 0$ (и заодно $x \ne 0$ для правой части — это уже включено).
Шаг 2. Логарифмируем по основанию 5:
$$\log_5\left(x^{\log_5 x}\right) = \log_5 \frac{125}{x^2}$$Шаг 3. Слева выносим показатель: $\log_5 x \cdot \log_5 x = (\log_5 x)^2$. Справа раскладываем частное:
$$\log_5 125 - \log_5 x^2 = 3 - 2\log_5 x$$Получаем:
$$(\log_5 x)^2 = 3 - 2\log_5 x$$Шаг 4. Замена $t = \log_5 x$:
$$t^2 + 2t - 3 = 0$$$D = 4 + 12 = 16$, $\sqrt{D} = 4$, корни $t_{1,2} = \dfrac{-2 \pm 4}{2}$: $t_1 = 1$, $t_2 = -3$.
Шаг 5. Обратная замена:
- $\log_5 x = 1 \Rightarrow x = 5$
- $\log_5 x = -3 \Rightarrow x = 5^{-3} = \dfrac{1}{125}$
Проверка $x = 5$: слева $5^{\log_5 5} = 5^1 = 5$; справа $\dfrac{125}{25} = 5$ ✅ Проверка $x = \frac{1}{125}$: $\log_5 \frac{1}{125} = -3$, слева $\left(\frac{1}{125}\right)^{-3} = 125^3 = 1\,953\,125$; справа $\dfrac{125}{(1/125)^2} = 125 \cdot 15\,625 = 1\,953\,125$ ✅
Ответ: $x = 5$, $x = \dfrac{1}{125}$
Почему это важно
Приём «прологарифмируй, и неизвестная спустится из показателя» — это одна из немногих школьных техник, которая переносится в высшую математику практически дословно. В теории вероятностей так выводят оценки максимального правдоподобия: чтобы найти параметр распределения, максимизируют не само правдоподобие $\prod p(x_i \mid \theta)$, а его логарифм $\sum \ln p(x_i\mid\theta)$ — и очень часто после логарифмирования степенная конструкция превращается в линейную по параметру, и задача решается в несколько строк вместо страницы.
Тот же принцип работает и в оптимизации. Задачи, где переменные перемножаются, называют геометрическим программированием — и стандартный подход к ним состоит в замене $x = e^u$, после которой произведения превращаются в суммы, а невыпуклая задача — в выпуклую. Это буквально логарифмирование, применённое ко всей задаче целиком. Умение видеть, что «здесь надо взять логарифм», — навык, за который платят.
Логарифмирование в машинном обучении: четыре сюжета
Сюжет 1: log-likelihood и машинный ноль
Начнём с того, с чего начинался урок. Модель классификации на каждом объекте выдаёт вероятность правильного ответа. Правдоподобие всей выборки — произведение:
$$L = p_1 \cdot p_2 \cdot \ldots \cdot p_n$$Каждое $p_i$ лежит между 0 и 1. Значит произведение монотонно падает с ростом $n$ — и падает не линейно, а геометрически.
Пример 16 (средний): языковая модель обработала 1000 токенов и на каждом присвоила правильному токену вероятность $0{,}001$. Что произойдёт при попытке посчитать правдоподобие «в лоб» и что даёт логарифмирование?
Решение:
Шаг 1. Считаем правдоподобие по определению:
$$L = 0{,}001^{1000} = (10^{-3})^{1000} = 10^{-3000}$$Шаг 2. Сравниваем с возможностями типа float64. Минимальное нормализованное положительное число там примерно $2{,}2 \cdot 10^{-308}$, минимальное денормализованное — около $5 \cdot 10^{-324}$. Наше значение $10^{-3000}$ меньше даже второго на 2676 порядков. Компьютер вернёт ровно 0.0.
Шаг 3. Это катастрофа не только потому, что число потеряно. Дальше по коду обычно идёт сравнение моделей ($L_A / L_B$ даст 0/0 = nan), логарифм (log(0) = -inf) или градиент — и весь расчёт разрушается.
Шаг 4. Логарифмируем. Обе части положительны (вероятности строго больше нуля), переход законен:
$$\ln L = \ln\left(\prod_{i=1}^{1000} p_i\right) = \sum_{i=1}^{1000} \ln p_i = 1000 \cdot \ln 0{,}001$$Шаг 5. Считаем: $\ln 0{,}001 = \ln 10^{-3} = -3\ln 10 \approx -3 \cdot 2{,}302585 = -6{,}907755$.
$$\ln L \approx 1000 \cdot (-6{,}907755) = -6907{,}755$$Шаг 6. Число $-6907{,}755$ хранится в float64 с полной точностью — тут нет ни переполнения, ни потери значащих цифр. Более того, из него легко достаётся понятная метрика: средний $\ln$ на токен равен $-6{,}9078$, а перплексия модели $= e^{6{,}9078} = 1000$ — то есть модель «в среднем колеблется между тысячей равновероятных вариантов». Ровно то, что мы и заложили.
Ответ: прямое произведение обнуляется в ноль (истинное значение $10^{-3000}$ вне диапазона float64), логарифмирование даёт $\ln L \approx -6907{,}76$, перплексия 1000.
📌 Обрати внимание: логарифмирование здесь не приближение и не хитрость. Это точное равносильное преобразование. Мы не потеряли ни капли информации: $L$ восстанавливается из $\ln L$ однозначно (просто в float64 не помещается — но обычно $L$ и не нужен, все сравнения делаются в логарифмах).
Сюжет 2: log-sum-exp — потенцирование, которое нельзя делать в лоб
Есть обратная беда. Иногда логарифмы нужно сложить не как логарифмы, а как числа: например, чтобы посчитать вероятность объединения событий или нормировочную сумму softmax. То есть нужно найти
$$\ln\left(e^{a_1} + e^{a_2} + \ldots + e^{a_n}\right)$$где $a_i$ — большие по модулю числа. Прямое вычисление означает потенцирование каждого $a_i$ — а $e^{1000}$ переполняет float64 (максимум там около $1{,}8 \cdot 10^{308}$, а $e^{1000} \approx 10^{434}$), и результат станет inf.
Выход — вынести за скобку самое большое слагаемое, то есть тот же приём вынесения общего множителя, только в показательном виде.
Определение: Трюк log-sum-exp: пусть $M = \max_i a_i$. Тогда
$$\ln \sum_i e^{a_i} = M + \ln \sum_i e^{a_i - M}$$Все показатели $a_i - M$ неположительны, значит все экспоненты лежат в $(0; 1]$, переполнение невозможно, а хотя бы одно слагаемое равно ровно 1 — значит и обнуления суммы не будет.
Пример 17 (сложный): вычисли $\ln\left(e^{799} + e^{800} + e^{801}\right)$
Решение:
Шаг 1. Прямой путь невозможен: $e^{801}$ — это число порядка $10^{348}$, оно не помещается в float64, и сумма станет inf, а её логарифм — тоже inf.
Шаг 2. Находим максимум показателей: $M = 801$.
Шаг 3. Выносим $e^{801}$ за скобку — это обычное свойство степеней:
$$e^{799} + e^{800} + e^{801} = e^{801}\left(e^{-2} + e^{-1} + e^{0}\right)$$Шаг 4. Логарифмируем произведение — логарифм произведения равен сумме логарифмов:
$$\ln\left(e^{799} + e^{800} + e^{801}\right) = 801 + \ln\left(e^{-2} + e^{-1} + 1\right)$$Шаг 5. Считаем скобку — все слагаемые скромного размера:
$$e^{-2} \approx 0{,}135335, \quad e^{-1} \approx 0{,}367879, \quad 1$$$$\text{сумма} \approx 1{,}503214$$
Шаг 6. $\ln 1{,}503214 \approx 0{,}407606$.
$$\ln\left(e^{799} + e^{800} + e^{801}\right) \approx 801 + 0{,}4076 = 801{,}4076$$Проверим логику ответа. Результат обязан быть чуть больше максимального показателя 801 (сумма больше самого большого слагаемого), но меньше $801 + \ln 3 \approx 802{,}1$ (сумма трёх слагаемых меньше утроенного максимального). Наш ответ $801{,}41$ в этот коридор попадает ✅
Ответ: $\approx 801{,}4076$
📌 Функция logsumexp есть в SciPy, PyTorch и TensorFlow, и внутри неё — ровно эти шесть шагов. Именно через неё считается log_softmax, а через него — кросс-энтропия. Каждый раз, когда обучается нейросеть-классификатор, этот приём выполняется миллионы раз.
Сюжет 3: логарифмирование целевой переменной и ловушка обратного перехода
В регрессии часто предсказывают величины, растянутые на порядки: цену квартиры, зарплату, длительность визита, число просмотров. Такие величины обычно скошены вправо: масса значений в районе среднего и длинный хвост очень больших.
Модель, обученная на исходных значениях, будет тянуться за хвостом: одна квартира за 200 миллионов даст такой же вклад в MSE, как сотня квартир, ошибка на которых 20 миллионов. Стандартный приём — обучать модель не на $y$, а на $\ln y$ (или $\ln(1+y)$, если бывают нули). После логарифмирования распределение становится ближе к симметричному, и модель начинает штрафоваться за относительную ошибку, а не за абсолютную: ошибиться на 10% при цене 3 млн и при цене 30 млн станет одинаково плохо. Это почти всегда то, чего мы и хотим.
Но потом прогноз надо вернуть в исходные единицы — потенцировать. И вот тут прячется ловушка, на которой спотыкаются даже опытные аналитики.
Пример 18 (сложный): модель обучена на $\ln y$ и для конкретного объекта предсказала $\hat\mu = 8{,}2$. Стандартное отклонение остатков модели (в логарифмической шкале) $\sigma = 0{,}5$. Какой прогноз в исходных единицах?
Решение:
Шаг 1. Наивный ответ. Потенцируем прямо:
$$\hat y = e^{8{,}2} \approx 3641$$Шаг 2. В чём проблема. Модель предсказывает среднее значение $\ln y$. Но среднее логарифма и логарифм среднего — разные вещи. Потенцирование — выпуклая функция, она «растягивает» большие значения сильнее, чем малые, поэтому среднее от $e^{\text{чего-то}}$ всегда больше, чем $e^{\text{от среднего}}$.
Проверим это на пальцах. Пусть в логарифмической шкале истинные значения симметрично разбросаны вокруг $8{,}2$: скажем, $7{,}2$ и $9{,}2$ поровну. Их среднее ровно $8{,}2$, наш прогноз честный. Потенцируем каждое: $e^{7{,}2} \approx 1339$ и $e^{9{,}2} \approx 9897$. Их среднее $\approx 5618$, а вовсе не $3641$. Симметрия в логарифмах — это асимметрия в исходной шкале.
Шаг 3. Что же тогда даёт $e^{8{,}2}$? Оно даёт медиану прогноза (логарифм монотонен, поэтому середину он сохраняет) — и это тоже вполне осмысленная величина, просто не среднее.
Шаг 4. Поправка. Если остатки в логарифмической шкале примерно нормальны с дисперсией $\sigma^2$, то среднее исходной величины равно
$$\hat y_{\text{среднее}} = e^{\hat\mu + \sigma^2/2}$$Подставляем $\sigma^2 = 0{,}25$:
$$\hat y = e^{8{,}2 + 0{,}125} = e^{8{,}325} \approx 4126$$Шаг 5. Сравниваем: $4126$ против $3641$ — разница $e^{0{,}125} \approx 1{,}133$, то есть больше 13%. Если модель предсказывает выручку, наивное потенцирование систематически занижает прогноз на 13% на каждом объекте — а в сумме по всей выборке это уже заметные деньги.
Ответ: медианный прогноз $e^{8{,}2} \approx 3641$; прогноз для среднего $e^{8{,}325} \approx 4126$; наивное потенцирование занижает среднее примерно на 13%.
📌 Это следствие общего факта: для выпуклой функции $f$ выполняется $\overline{f(x)} \ge f(\bar{x})$ (неравенство Йенсена). Логарифмирование туда и потенцирование обратно — не полностью симметричная пара, когда между ними встаёт усреднение. Практический вывод для работы: если ты логарифмировал таргет — знай, что после np.exp(pred) ты получаешь медиану, а не среднее, и решай осознанно, какая из двух величин тебе нужна.
Сюжет 4: среднее геометрическое — это среднее арифметическое логарифмов
Пример 19 (средний): инвестиция за четыре года дала доходности $+50\%$, $-50\%$, $+50\%$, $-50\%$. Какова средняя годовая доходность?
Решение:
Шаг 1. Соблазн ответить «ноль»: среднее арифметическое от $+50$ и $-50$ равно нулю. Это неверный ответ, и вот почему: доходности перемножаются, а не складываются. Капитал за четыре года умножился на
$$1{,}5 \cdot 0{,}5 \cdot 1{,}5 \cdot 0{,}5 = 0{,}5625$$То есть от вложенной суммы осталось 56,25%. Никакого «нуля» — потеря почти половины капитала.
Шаг 2. Правильная средняя — та, которая, будучи применена четыре раза подряд, даст тот же итог. Это среднее геометрическое:
$$g = \sqrt[4]{1{,}5 \cdot 0{,}5 \cdot 1{,}5 \cdot 0{,}5} = \sqrt[4]{0{,}5625}$$Шаг 3. Корень четвёртой степени вручную считать неприятно. Логарифмируем — и произведение с корнем превратятся в сумму и деление:
$$\ln g = \frac{1}{4}\left(\ln 1{,}5 + \ln 0{,}5 + \ln 1{,}5 + \ln 0{,}5\right)$$Шаг 4. Подставляем: $\ln 1{,}5 \approx 0{,}405465$, $\ln 0{,}5 \approx -0{,}693147$.
$$\ln g = \frac{2 \cdot 0{,}405465 + 2 \cdot (-0{,}693147)}{4} = \frac{0{,}810930 - 1{,}386294}{4} = \frac{-0{,}575364}{4} = -0{,}143841$$Шаг 5. Потенцируем:
$$g = e^{-0{,}143841} \approx 0{,}8660$$Шаг 6. Значит средняя годовая доходность $\approx -13{,}4\%$.
Проверим наш ответ: $0{,}8660^4 = 0{,}5625$ ✅ Ровно то, что получилось прямым перемножением.
Ответ: средняя годовая доходность $\approx -13{,}4\%$ (среднее геометрическое $0{,}866$), а вовсе не ноль.
Определение: Среднее геометрическое $n$ положительных чисел $g = \sqrt[n]{x_1 x_2 \ldots x_n}$ равно потенцированному среднему арифметическому их логарифмов:
$$\ln g = \frac{1}{n}\sum_{i=1}^{n}\ln x_i \quad \Longleftrightarrow \quad g = \exp\left(\frac{1}{n}\sum_{i=1}^{n}\ln x_i\right)$$
Именно так среднее геометрическое и вычисляют в коде: не через np.prod(x) ** (1/n) (произведение переполнится или обнулится), а через np.exp(np.mean(np.log(x))). Это тот же самый переход $\prod \to \sum$, который спасал log-likelihood.
Почему это важно
Все четыре сюжета — про одно и то же: логарифмирование меняет операцию, а не смысл. Произведение становится суммой, корень — делением, отношение — разностью. Смысл величины не меняется, потому что переход равносильный. А вот вычислительные свойства меняются кардинально: сумма не переполняется и не обнуляется, а разность логарифмов не страдает от деления на почти-ноль.
И один общий вывод, который стоит забрать с собой: если величины перемножаются — работай с ними в логарифмах. Правдоподобия, вероятности, доходности, коэффициенты усиления, отношения шансов, множители роста — всё это живёт в логарифмической шкале удобнее, чем в исходной. Потенцируй только в самом конце, когда результат надо показать человеку. И помни про Йенсена: если между логарифмированием и потенцированием было усреднение, обратно ты вернёшься не в ту точку, из которой ушёл.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: Прологарифмируй по основанию 10 выражение $P = a^3 b^2 \sqrt{c}$, считая $a, b, c > 0$.
Задание 2: Прологарифмируй по основанию 2 выражение $P = \dfrac{x^4 \sqrt[3]{y}}{z^5}$, считая $x, y, z > 0$.
Задание 3: Выполни потенцирование: $\lg A = 2\lg m + 3\lg n - \dfrac{1}{2}\lg p$, где $m, n, p > 0$.
Задание 4: Найди $A$, если $\ln A = 5 - 2\ln x$ (при $x > 0$).
Задание 5: Сколько цифр в десятичной записи числа $2^{100}$? Прими $\lg 2 = 0{,}30103$.
Задание 6: Реши уравнение $\lg x + \lg(x + 3) = 1$.
Задание 7: Реши уравнение $3^x = 7$ и найди приближённое значение корня.
Задание 8: Реши уравнение $2^{x} = 3^{x-1}$.
Задание 9: Зная только $\lg 2 = 0{,}3010$, найди $\lg 5$, $\lg 50$ и $\lg 0{,}2$.
Задание 10: Модель на трёх объектах выдала правильному классу вероятности $0{,}5$; $0{,}25$; $0{,}125$. Посчитай правдоподобие прямым перемножением и через сумму логарифмов по основанию 2 — и убедись, что результаты согласуются.
Средние (задания 11-20)
Задание 11: Вычисли $A = \sqrt[3]{\dfrac{2^{10} \cdot 4^4}{8^2}}$, логарифмируя по основанию 2.
Задание 12: Прологарифмируй натуральным логарифмом выражение $Q = \dfrac{x^2\sqrt{y}}{\sqrt[3]{z^2 t}}$, считая $x, y, z, t > 0$.
Задание 13: Реши уравнение $x^{\lg x} = 1000 x^2$.
Задание 14: Реши уравнение $2^{x} \cdot 5^{x} = 0{,}1 \cdot \left(10^{x-1}\right)^{5}$.
Задание 15: Реши уравнение $2^{x^2 - 1} = 3^{x - 1}$.
Задание 16: Сколько цифр в десятичной записи числа $3^{200}$? Прими $\lg 3 = 0{,}4771$.
Задание 17: С какой цифры начинается число $2^{50}$? Прими $\lg 2 = 0{,}30103$.
Задание 18: Портфель за четыре года показал множители роста $1{,}2$; $0{,}8$; $1{,}5$; $1{,}1$. Найди среднегодовой множитель роста через логарифмирование.
Задание 19: Модель обработала 2000 объектов и на каждом дала правильному классу вероятность $0{,}01$. Объясни, почему прямое вычисление правдоподобия во float64 даст ноль, и посчитай $\ln L$.
Задание 20: Модель регрессии обучена на $\ln y$ и предсказала $\hat\mu = 6{,}0$ при стандартном отклонении остатков $\sigma = 0{,}4$ (в логарифмической шкале). Найди медианный прогноз и прогноз для среднего, а также относительную разницу между ними.
Продвинутые (задания 21-30)
Задание 21: Реши уравнение $x^{\log_2 x} = \dfrac{16}{x^3}$.
Задание 22: Реши уравнение $x^{\lg 5} + 5^{\lg x} = 50$.
Задание 23: Вычисли $A = \dfrac{48{,}7^2 \cdot \sqrt{0{,}0625}}{312}$ методом логарифмирования, пользуясь таблицей: $\lg 4{,}87 = 0{,}6875$, $\lg 6{,}25 = 0{,}7959$, $\lg 3{,}12 = 0{,}4942$.
Задание 24: Пусть $2^x = 3^y = 6^z$, где все три числа отличны от нуля. Докажи, что $\dfrac{1}{x} + \dfrac{1}{y} = \dfrac{1}{z}$.
Задание 25: Реши уравнение $x^{\lg x + 4} = 10^5$.
Задание 26: Реши систему при $x > 0$, $y > 0$, $y \ne 1$:
$$\begin{cases} x^{y} = y^{x} \\ x = 2y \end{cases}$$Задание 27: Вычисли $\ln\left(e^{1000} + e^{1001}\right)$, не вызывая переполнения. Ответ дай с точностью до четырёх знаков после запятой.
Задание 28: Две модели на трёх объектах присвоили правильному классу вероятности: модель A — $0{,}9$; $0{,}8$; $0{,}7$; модель B — $0{,}99$; $0{,}6$; $0{,}5$. Сравни модели по log-likelihood и посчитай перплексию каждой.
Задание 29: Что больше: $5^{44}$ или $4^{53}$? Прими $\lg 2 = 0{,}30103$, $\lg 5 = 0{,}69897$.
Задание 30: Языковая модель обработала последовательность из 10 токенов, и суммарный логарифм правдоподобия составил $\ln L = -23{,}03$. Найди среднюю вероятность, которую модель присваивала правильному токену, и перплексию модели. Объясни, почему нельзя просто взять среднее арифметическое вероятностей.
Частые ошибки
❌ Ошибка 1: логарифмировать произведение, не проверив знаки множителей
Неправильно: «$\log_a(MN) = \log_a M + \log_a N$ — это же формула, она всегда верна».
Правильно: формула верна только при $M > 0$ и $N > 0$. Условия $MN > 0$ недостаточно: при $M = N = -3$ произведение равно 9, логарифм от него существует, а логарифмы от самих множителей — нет. Поэтому перед разворачиванием либо оговариваем положительность буквенных множителей, либо явно разбираем случай «оба отрицательны».
Почему важно: это ровно тот механизм, который порождает и посторонние корни (при движении в обратную сторону), и потерянные (при движении в эту). Именно на этой ошибке в XVIII веке споткнулся Иоганн Бернулли, доказывая, что $\log(-x) = \log x$.
❌ Ошибка 2: потенцировать и не проверить корни
Неправильно: $\lg(x-1) + \lg(x-4) = \lg 6 \Rightarrow (x-1)(x-4) = 6 \Rightarrow x^2 - 5x - 2 = 0$ — решил, записал оба корня, готово.
Правильно: потенцирование расширяет ОДЗ, поэтому после него корни обязательно фильтруются: либо по заранее выписанной ОДЗ ($x > 4$), либо подстановкой в исходное уравнение. В нашем примере корни $x = \frac{5 \pm \sqrt{33}}{2}$, то есть примерно $5{,}372$ и $-0{,}372$; второй лежит вне ОДЗ и посторонний.
Почему важно: проверка после потенцирования — не формальность и не «для учителя». Это единственный способ вернуться из расширенной задачи в исходную. Пропустишь — получишь безупречно посчитанный неверный ответ.
❌ Ошибка 3: считать, что логарифм суммы раскладывается
Неправильно: $\lg(a + b) = \lg a + \lg b$.
Правильно: логарифм разворачивает в сумму произведение, а не сумму. Для логарифма суммы простой формулы нет вообще. Проверь на числах: $\lg(2 + 8) = \lg 10 = 1$, а $\lg 2 + \lg 8 = 0{,}301 + 0{,}903 = 1{,}204$. Не равно. Зато $\lg(2\cdot 8) = \lg 16 = 1{,}204$ — вот сумма логарифмов и нашлась.
Почему важно: это ошибка №1 по частоте во всей теме логарифмов. Запомни направление стрелки: умножение снаружи → сложение внутри. Сложение снаружи не превращается ни во что.
❌ Ошибка 4: терять второй корень при $(\log_a x)^2 = c$
Неправильно: «$(\lg x)^2 = 4$, значит $\lg x = 2$, значит $x = 100$».
Правильно: квадрат даёт два значения: $\lg x = 2$ и $\lg x = -2$, то есть $x = 100$ и $x = 0{,}01$. Оба положительны, оба входят в ОДЗ, оба — настоящие корни. Проверка: $0{,}01^{\lg 0{,}01} = 0{,}01^{-2} = 10000$ ✅
Почему важно: в уравнениях вида $x^{\log_a x} = \ldots$ второй корень почти всегда получается «маленьким» ($0{,}1$; $0{,}01$; $\frac{1}{125}$), и его легко проглядеть, потому что он выглядит неправдоподобно. Он правдоподобен — проверь подстановкой и убедишься.
❌ Ошибка 5: сокращать на скобку в уравнении $a^{f(x)} = b^{g(x)}$
Неправильно: $2^{x^2-1} = 3^{x-1} \Rightarrow (x^2-1)\ln 2 = (x-1)\ln 3$, делим обе части на $(x-1)$: $(x+1)\ln 2 = \ln 3$, ответ один.
Правильно: делить на $(x-1)$ нельзя — при $x = 1$ это деление на ноль, и корень $x = 1$ теряется. Надо выносить множитель: $(x-1)\big[(x+1)\ln 2 - \ln 3\big] = 0$, откуда два корня.
Почему важно: потерянный корень — беда более серьёзная, чем посторонний. Посторонний ловится проверкой, потерянный не ловится ничем: его просто нет в ответе, и проверять нечего. Правило: выносим множитель, а не сокращаем на него.
❌ Ошибка 6: наивно потенцировать усреднённый логарифм
Неправильно: «Модель обучена на $\ln y$, предсказала $8{,}2$ — значит прогноз выручки $e^{8{,}2} = 3641$, это среднее».
Правильно: $e^{8{,}2}$ — это медиана, а не среднее. Из-за выпуклости экспоненты среднее исходной величины больше: при нормальных остатках с дисперсией $\sigma^2$ оно равно $e^{\hat\mu + \sigma^2/2}$. При $\sigma = 0{,}5$ поправка составляет $e^{0{,}125} \approx 1{,}133$, то есть 13%.
Почему важно: это систематическое смещение, а не случайный шум — оно не уходит при росте выборки и портит любые суммарные оценки (общая выручка, план, бюджет). При этом метрики на логарифмической шкале выглядят отлично, и ошибку легко не заметить месяцами.
❌ Ошибка 7: путать знак характеристики у чисел меньше единицы
Неправильно: $\lg 0{,}0418 \approx -0{,}6212 - 2 = -2{,}6212$.
Правильно: $0{,}0418 = 4{,}18\cdot 10^{-2}$, значит $\lg 0{,}0418 = \lg 4{,}18 + \lg 10^{-2} = 0{,}6212 - 2 = -1{,}3788$. Мантисса всегда положительна (она логарифм числа от 1 до 10), отрицательной бывает только характеристика.
Почему важно: ошибка ровно на единицу в характеристике даёт ответ, отличающийся в 10 раз, а ошибка в знаке мантиссы — вообще произвольный мусор. В старых таблицах для этого даже была специальная запись $\overline{2}{,}6212$ с чертой над характеристикой — чтобы не спутать «минус два плюс 0,6212» с «минус 2,6212».
Главное запомнить
-
Логарифмирование — взять логарифм от выражения или от обеих частей равенства и раскрыть по свойствам: произведение → сумма, частное → разность, степень → множитель, корень → деление.
-
Потенцирование — обратное действие: свернуть сумму логарифмов обратно в один и снять логарифмы, перейдя от $\log_a M = \log_a N$ к $M = N$.
-
Логарифмировать равенство $A = B$ можно только при $A > 0$ и $B > 0$; тогда переход равносилен — ни лишних корней, ни потерянных.
-
Формула $\log_a(MN) = \log_a M + \log_a N$ требует положительности каждого множителя, а не только произведения. Это источник всех бед темы.
-
Потенцирование расширяет ОДЗ → после него корни обязательно проверяются. Логарифмирование (разворачивание) сужает ОДЗ → корни могут потеряться, и проверкой их уже не вернуть.
-
Для неравенств: при $a > 1$ логарифмирование сохраняет знак, при $0 < a < 1$ — переворачивает. Для сравнения чисел бери основание больше единицы и не думай о перевороте.
-
Десятичный логарифм раскладывается на характеристику (целая часть — порядок числа) и мантиссу (дробная часть — сами цифры). Число цифр в $N$ равно $\lfloor\lg N\rfloor + 1$, первые цифры даёт $10^{\{\lg N\}}$.
-
Уравнения с неизвестной в основании и в показателе ($x^{\log_a x} = \ldots$) решаются логарифмированием по основанию из показателя с последующей заменой $t = \log_a x$ — получается квадратное уравнение, и корней обычно два.
-
Уравнения $a^{f(x)} = b^{g(x)}$ логарифмируются по любому основанию; $\log a$ и $\log b$ становятся числовыми коэффициентами. Общий множитель выноси, а не сокращай.
-
В ML произведение вероятностей всегда логарифмируют: произведение тысяч чисел меньше единицы обнуляется во
float64(граница $\sim 10^{-308}$), сумма логарифмов — нет. Обратно потенцируют только в конце и с оглядкой на неравенство Йенсена.
Связь с другими темами курса
Что было до. Прямой фундамент — определение логарифма (урок 116) и его свойства (урок 117): именно они и есть «правила перевода» между миром произведений и миром сумм. Десятичный и натуральный логарифм (урок 118) дали два рабочих основания: $\lg$ для порядков и вычислений, $\ln$ для математики и ML. Логарифмическая функция (урок 119) объяснила, откуда берётся законность логарифмирования равенств — из строгой монотонности. Логарифмические уравнения (урок 120) познакомили с посторонними корнями, а неравенства (урок 121) — с переворотом знака при основании меньше единицы. Показательные уравнения (урок 114) дали обратную половину пары: там мы приводили к общему основанию, здесь — логарифмируем, когда общего основания нет.
Что будет дальше. Урок 123 про комбинированные уравнения — там логарифмирование станет одним из инструментов в задачах, где показательное, логарифмическое и алгебраическое перемешаны. В уроке 124 (системы) приём «прологарифмировать оба уравнения» превращает систему с произведениями в линейную систему относительно логарифмов — очень красивый ход. В уроке 125 (рост и распад) вся математика задач «через сколько лет» — это логарифмирование уравнения $a^t = b$. Позже, в теме прогрессий (уроки 127-128), обнаружится, что логарифмы геометрической прогрессии образуют арифметическую — прямое следствие превращения произведения в сумму. А когда дойдём до производной (урок 133 и далее), логарифмическое дифференцирование окажется тем же самым приёмом: прологарифмировал громоздкое произведение, продифференцировал сумму, потенцировал обратно.
Где применяется в жизни и в ML. Log-likelihood и кросс-энтропия — обязательное логарифмирование произведения вероятностей. logsumexp и log_softmax — потенцирование с выносом максимума за скобку. Логарифмирование целевой переменной в регрессии и обратный переход с поправкой на смещение. Среднее геометрическое доходностей, коэффициентов роста и метрик — через exp(mean(log(x))). Логарифмическая шкала на графиках, где данные растянуты на порядки. Шкалы децибел, pH, звёздных величин и шкала Рихтера — там логарифмирование уже встроено в единицы измерения. И, наконец, само устройство чисел с плавающей точкой: экспонента отдельно, мантисса отдельно — идея Бриггса, реализованная в кремнии.
Интересные факты
1. Логарифмическая линейка летала на Луну. Астронавты программы «Аполлон» брали с собой модель Pickett N600-ES — алюминиевую логарифмическую линейку длиной 15 сантиметров. Она работала на чистом логарифмировании: сложение отрезков на логарифмических шкалах физически выполняет умножение чисел. Бортовой компьютер «Аполлона» имел около 4 килобайт оперативной памяти, и линейка была реальным резервным инструментом для оперативных расчётов, а не сувениром.
2. Бриггс извлекал квадратный корень 54 раза подряд. Чтобы вычислить $\lg 2$ с точностью до четырнадцатого знака, он пользовался тем, что многократное извлечение корня приближает число к единице, а логарифм при этом делится пополам. Каждое извлечение корня из тридцатизначного числа выполнялось вручную. На таблицу 30 000 логарифмов ушла бо́льшая часть жизни — и эти таблицы переиздавались без изменений почти триста лет.
3. Закон Бенфорда — прямое следствие мантиссы. В реальных наборах данных (площади рек, счета за электричество, финансовые отчёты) первая значащая цифра оказывается единицей примерно в 30% случаев, а девяткой — лишь в 4,6%. Причина ровно та, что мы разбирали: если данные растянуты на много порядков, мантисса их логарифма распределена почти равномерно на $[0;1)$, а первой цифре 1 соответствует отрезок мантиссы длиной $\lg 2 \approx 0{,}301$, тогда как цифре 9 — отрезок длиной $\lg\frac{10}{9} \approx 0{,}046$. Налоговые службы используют этот факт для выявления сфальсифицированной отчётности: выдуманные числа распределены слишком равномерно.
4. Логарифмическая линейка не умела складывать. Умножение, деление, степени, корни, тригонометрия — пожалуйста. А обычное сложение двух чисел на ней выполнить нельзя. Инженеры складывали в столбик на бумаге, а линейкой пользовались для всего остального. Ирония в том, что вся конструкция построена именно на превращении умножения в сложение — просто сложение в ней выполняет механика, а не человек.
5. Число с плавающей точкой — это характеристика и мантисса Бриггса. В формате IEEE 754 число хранится как знак, экспонента (11 бит в float64) и мантисса (52 бита). Экспонента — это в точности характеристика логарифма по основанию 2, мантисса — значащие цифры. Именно поэтому у float относительная точность одинакова на всех порядках: он живёт в логарифмической шкале. И именно поэтому крошечные и гигантские числа теряются — у характеристики всего 11 бит, то есть диапазон примерно от $10^{-308}$ до $10^{308}$.
Лайфхаки и полезные трюки
1. Основание для логарифмирования бери из показателя
Если в показателе стоит $\lg x$ — логарифмируй по основанию 10. Если $\log_3 x$ — по основанию 3. Если $\ln x$ — натуральным. Тогда после выноса показателя слева получится ровно $(\log_a x)^2$, и замена $t = \log_a x$ сработает без единой лишней формулы смены основания.
2. Свободное число всегда превращается в логарифм
При потенцировании застревают «голые» числа: $\log_2 A = 3 + \ldots$. Помни, что любое число $b$ — это $\log_a a^b$. Тройка по основанию 2 — это $\log_2 8$, двойка по основанию 10 — это $\lg 100$, единица по основанию $e$ — это $\ln e$. После такой замены всё выражение становится однородным и сворачивается за один шаг.
3. Число цифр и первая цифра — за 15 секунд
Число цифр в $N$: $\lfloor \lg N\rfloor + 1$. Первая цифра: смотри мантиссу и сравнивай с ориентирами $\lg 2 = 0{,}301$, $\lg 3 = 0{,}477$, $\lg 5 = 0{,}699$, $\lg 7 = 0{,}845$. Мантисса $0{,}42$ лежит между $\lg 2$ и $\lg 3$ — значит число начинается с двойки. Никакого калькулятора.
4. Держи в голове четыре логарифма — и получишь все остальные
$\lg 2 = 0{,}3010$, $\lg 3 = 0{,}4771$, $\lg 7 = 0{,}8451$. Отсюда: $\lg 5 = 1 - \lg 2 = 0{,}6990$, $\lg 4 = 2\lg 2$, $\lg 6 = \lg 2 + \lg 3$, $\lg 8 = 3\lg 2$, $\lg 9 = 2\lg 3$. То есть логарифмы всех однозначных чисел — из трёх запомненных. Приём «пятёрка — это десять пополам» экономит время постоянно.
5. В уравнениях $a^{f}=b^{g}$ считай $\log a$ и $\log b$ просто буквами
После логарифмирования получается $f(x)\cdot\ln a = g(x)\cdot\ln b$, где $\ln a$ и $\ln b$ — обычные числовые коэффициенты вроде 0,693 и 1,099. Дальше это обычное алгебраическое уравнение: раскрой скобки, собери $x$, вынеси общий множитель. Численное значение подставляй только в самом конце — так формула остаётся точной, а ответ красивым ($\log_{1{,}5}2$ вместо $1{,}7095$).
6. Прикидывай ответ по «коридору» до вычисления
Перед тем как считать $\ln(e^{799}+e^{800}+e^{801})$, оцени границы: результат больше максимального показателя 801 и меньше $801 + \ln 3$. Перед решением $3^x = 7$ оцени: $3^1 = 3 < 7 < 9 = 3^2$, значит $1 < x < 2$. Такая прикидка ловит ошибку в порядке величины мгновенно — а именно ошибки на порядок в логарифмах самые обидные.
7. Правило направления: свернул — проверь, развернул — выпиши ОДЗ
Одна фраза, которая закрывает половину ошибок темы. Если ты сворачивал (потенцировал, шёл от суммы логарифмов к одному) — ОДЗ расширилась, корни надо проверить подстановкой. Если разворачивал (логарифмировал, шёл от одного логарифма к сумме) — ОДЗ сузилась, надо было выписать её заранее и проследить, не потерялось ли решение.
8. В коде никогда не перемножай вероятности
Три идиомы, которые стоит запомнить наизусть:
- вместо
np.prod(p)→np.sum(np.log(p)); - вместо
np.prod(x)**(1/n)(среднее геометрическое) →np.exp(np.mean(np.log(x))); - вместо
np.log(np.sum(np.exp(a)))→scipy.special.logsumexp(a).
Плюс np.log1p(x) вместо np.log(1+x) и np.expm1(x) вместо np.exp(x)-1 для очень маленьких $x$ — они сохраняют значащие цифры там, где обычные функции их теряют.
Логарифмирование и потенцирование — редкий случай, когда школьная тема буквально, без переводов и упрощений, лежит в основе промышленного кода. Ты открываешь исходники PyTorch, находишь logsumexp, и видишь там вынесение максимального слагаемого за скобку — тот же приём, что и в задании 27. Смотришь, как считается кросс-энтропия, и видишь превращение произведения в сумму — то самое, что придумал Непер в 1614 году, чтобы астрономы не сходили с ума от умножения в столбик.
Но главное, что стоит унести из этого урока, — не техника, а способ думать. Логарифмирование и потенцирование не симметричны. Одно действие аккуратное, другое расширяющее. И каждый раз, когда ты применяешь преобразование, честный вопрос звучит не «верна ли формула?», а «решаю ли я всё ещё ту же задачу?». Формула может быть безупречной, арифметика — безошибочной, а задача — уже подменённой. Именно эту привычку — спрашивать про область, а не только про равенство — потом отделяет хорошего аналитика от того, кто просто умеет считать.
И ещё кое-что приятное: ты теперь умеешь узнать, что $3^{100}$ начинается с пятёрки и содержит 48 цифр, не написав ни одной из них. Это не фокус — это понимание того, как устроено число. Дальше нас ждут комбинированные уравнения, где показательное, логарифмическое и алгебраическое сплетаются в одну задачу, и все приёмы, которые ты собрал за последние семь уроков, начнут работать вместе. Ты к этому готов. 🚀
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку