JS метод Math.log1p()
Загальний опис
Math.log1p() — це метод, який належить до об'єкта Math
у JavaScript. Він повертає натуральний логарифм (в основі e
) числа, збільшеного на одиницю. Тобто, для числа x
, Math.log1p(x)
еквівалентний Math.log(x + 1)
.
Коли працюєте з дуже малими числами, точність може стати важливим питанням. При виконанні операцій над дуже малими числами, результат може бути неправильним через обмеження машинної точності. Math.log1p()
був створений, щоб забезпечити більш точні результати при роботі з малими числами, ніж просто використовуючи Math.log(x + 1)
.
В основному, Math.log1p()
використовується в наукових, інженерних та фінансових обчисленнях, де важлива висока точність. Наприклад, в статистиці, при розрахунках з використанням експоненційних функцій або при роботі з логарифмічними шкалами.
Приклад:
let value = 1e-10;
console.log(Math.log1p(value)); // Повертає логарифм value збільшеного на одиницю
console.log(Math.log(value + 1)); // Може повернути менш точний результат
Основні особливості та прийоми
Однією з ключових особливостей Math.log1p()
є його здатність точно обчислювати логарифм числа, яке збільшено на одиницю, навіть якщо саме число дуже маленьке.
Також, якщо передати від'ємне число, що менше або дорівнює -1, Math.log1p()
поверне NaN, оскільки логарифм від'ємного числа або нуля не існує у реальних числах.
На відміну від інших методів, таких як Math.log()
, Math.log1p()
спеціально розроблений для роботи з малими числами, де збільшення на одиницю може призвести до значних втрат точності. Також, відмінність від Math.log10()
та Math.log2()
, які повертають, відповідно, десятковий та двійковий логарифми числа.
Приклад:
let smallValue = 0.000000001;
console.log(Math.log1p(smallValue)); // Дуже точний результат
console.log(Math.log(smallValue + 1)); // Можливі втрати точності
У вас може виникнути питання, чому просто не користуватися завжди Math.log1p()
, якщо він такий точний? Відповідь полягає в тому, що у більшості випадків різниця може бути незначною, але коли точність є критичною, Math.log1p()
може бути вашим найкращим вибором.
Нотатка: | Пам'ятайте, що |
Нотатка: | Якщо ви бажаєте знайти натуральний логарифм самого числа (не збільшеного на одиницю), використовуйте метод Приклад:
|
Порада: | Якщо ви виконуєте обчислення, де вам потрібно обійти проблеми з маленькими числами (особливо коли значення близьке до нуля), |
Синтаксис
Math.log1p(x)
Параметри
- *
x
Число, яке має бути більше або рівне -1.
Return
logarithm
Повертає натуральний логарифм (з основою e) значення
x + 1
. Якщоx
дорівнює -1, метод повертає-Infinity
, а якщоx
менше -1 - повертаєNaN
.
Переглядачі
Переглядач | |||||
---|---|---|---|---|---|
38 |
25 |
8 |
25 |
12 |
Переглядач | ||||
---|---|---|---|---|
38 |
38 |
25 |
8 |
Переглядач | ||
---|---|---|
0.12.0 |
1.0 |
Приклади
У цьому прикладі користувач може ввести число у текстовому полі, натиснути кнопку "Розрахувати" і побачити результат використання методу Math.log1p()
. Якщо введене значення некоректне, користувач отримає повідомлення про помилку.
У цьому прикладі ми обчислюємо природний логарифм відсоткового зростання. Для обчислення відсоткового зростання ми віднімаємо початкове значення від кінцевого і ділимо результат на початкове значення. Використовуючи Math.log1p()
, ми можемо отримати логарифм цього зростання +1. Це корисно, наприклад, при аналізі фінансових даних.
// Отримання природного логарифму відсоткового зростання
function logPercentIncrease(initialValue, finalValue) {
let percentIncrease = (finalValue - initialValue) / initialValue;
return Math.log1p(percentIncrease);
}
let initialValue = 100;
let finalValue = 110;
console.log(logPercentIncrease(initialValue, finalValue)); // Очікуваний результат близько 0.0953
У цьому прикладі ми перетворюємо значення слайдера на логарифмічну шкалу. Це корисно, коли хочете, щоб низькі значення слайдера були більш "чутливими" або "градієнтними" в порівнянні з високими значеннями. Застосовуючи Math.log1p()
до значення слайдера (поділеного на 100), ми можемо отримати логарифмічне перетворення цього значення, забезпечуючи більш плавне регулювання на низьких значеннях.
// Перетворюємо значення слайдера (0-100) на логарифмічну шкалу
function convertSliderValue(sliderValue) {
// Оскільки значення слайдера діляться на 100, вони представляють діапазон від 0 до 1.
// Щоб зробити це більш чутливим на низькому кінці, ми використовуємо log1p.
return Math.log1p(sliderValue / 100) * 100;
}
let sliderValue = 10; // Припустимо, користувач встановив слайдер на 10
console.log(convertSliderValue(sliderValue)); // Очікуваний результат менше 10, оскільки ми використовуємо логарифмічну шкалу