Log1p: примеры (JAVASCRIPT)

Использование метода Math.log1p() в JavaScript
Раздел: Математика, Логарифмы
log1p(number): number

Описание функции Math.log1p()

Функция Math.log1p() возвращает натуральный логарифм (логарифм по основанию e) от числа x + 1. Её основное назначение — повышение точности вычисления логарифмов для чисел, близких к нулю. Это связано с тем, что при сложных вычислениях или при работе с очень малыми значениями прямое вычисление Math.log(1 + x) может привести к потере точности из-за особенностей представления чисел с плавающей запятой.

Синтаксис функции: Math.log1p(x).

Аргументы:

  • x: Число, значение от которого вычисляется ln(x + 1). Может быть любым числовым типом.

Возвращаемое значение:

  • Натуральный логарифм числа (x + 1).
  • Если x равен -1, возвращает -Infinity.
  • Если x меньше -1, возвращает NaN.
  • Если x равен +Infinity, возвращает +Infinity.
  • Если x равен -Infinity, возвращает NaN.

Простыe примеры использования

Базовое применение с положительным числом:

console.log(Math.log1p(0));
// x = 0, вычисляется ln(1)
0

Использование с числом, близким к нулю:

console.log(Math.log1p(1e-15));
9.999999999999995e-16

Результат для аргумента -1:

console.log(Math.log1p(-1));
-Infinity

Аргумент меньше -1 приводит к NaN:

console.log(Math.log1p(-2));
NaN

Похожие функции в JavaScript

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

Math.log10(x) и Math.log2(x): вычисляют логарифм по основанию 10 и 2 соответственно. Их используют в специфических областях, например, в информатике или при работе с десятичными порядками величины.

Math.expm1(x): является обратной по смыслу к log1p, вычисляет e^x - 1 с повышенной точностью для малых x. Эти две функции часто применяют вместе в финансовых вычислениях и статистике.

Аналоги функции в других языках

Python: функция math.log1p(x) из модуля math. Имеет идентичное назначение и поведение.

import math
print(math.log1p(1e-9))
9.999999995e-10

PHP: функция log1p(). Работает аналогично.

echo log1p(0.5);
0.40546510810816

C/C++: функция log1p() объявлена в заголовочном файле <math.h>. Обеспечивает повышенную точность, как и в других языках.

#include <math.h>
#include <stdio.h>
int main() {
    printf("%f\n", log1p(0.01));
    return 0;
}
0.009950

MySQL: функция LOG1P(). Возвращает значение натурального логарифма аргумента, увеличенного на единицу.

SELECT LOG1P(0);
0

Типичные ошибки

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

console.log(Math.log1p(-1.5)); // x + 1 = -0.5
NaN

Некорректная передача нечислового аргумента, который может быть неявно преобразован. Логика преобразования соответствует стандартным правилам JavaScript.

console.log(Math.log1p("1")); // Строка преобразуется в число 1
0.6931471805599453
console.log(Math.log1p("abc")); // Нечисловая строка
NaN

Путаница между Math.log1p(x) и Math.log(x) + 1. Это математически разные выражения.

console.log(Math.log1p(1) === Math.log(1) + 1);
false

История изменений

Функция Math.log1p() была стандартизирована в спецификации ECMAScript 2015 (ES6). С момента добавления в стандарт её поведение и сигнатура не претерпевали изменений. В более ранних версиях JavaScript, например ES5, эта функция отсутствует, что может привести к ошибкам в устаревших средах выполнения.

Расширенные примеры применения

Использование в финансовых расчетах для вычисления непрерывно начисляемого процента при малых ставках.

Пример javascript
// Непрерывное наращение с очень малой ставкой
let tinyRate = 0.0005; // 0.05%
let time = 2;
let futureValue = 100 * Math.exp(Math.log1p(tinyRate) * time);
console.log(futureValue);
100.10001250052086

Вычисление логарифмической разности для относительных изменений, когда изменения малы.

Пример javascript
function logChange(startValue, endValue) {
    return Math.log1p((endValue - startValue) / startValue);
}
console.log(logChange(100, 100.1)); // Изменение на 0.1%
0.0009995003330834332

Применение в статистике для преобразования данных, содержащих нули, так как логарифм от нуля не определен, а log1p(0) дает 0.

Пример javascript
let dataWithZeros = [0, 0.5, 1, 2];
let transformedData = dataWithZeros.map(Math.log1p);
console.log(transformedData);
[0, 0.4054651081081644, 0.6931471805599453, 1.0986122886681098]

Использование совместно с Math.expm1 для точного вычисления выражений вида ln((1+a)/(1+b)).

Пример javascript
let a = 1e-10;
let b = 2e-10;
let preciseLogRatio = Math.log1p(a) - Math.log1p(b);
console.log(preciseLogRatio);
-9.999999995000001e-11

JS log1p function comments

En
Log1p Returns the natural logarithm (base `e`) of 1 + a number