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() може бути вашим найкращим вибором.

автор: Bond

Порада

Якщо ви виконуєте обчислення, де вам потрібно обійти проблеми з маленькими числами (особливо коли значення близьке до нуля), Math.log1p() може бути корисним для отримання більш точних результатів, оскільки він забезпечує підвищену точність у порівнянні з простим застосуванням Math.log() до числа, збільшеного на одиницю.

автор: Bond
Нотатка

Пам'ятайте, що Math.log1p() розраховано для введення лише невід'ємних чисел. Якщо ваші додатки вимагають роботи з від'ємними числами у подібних обчисленнях, обов'язково виконайте відповідні перевірки або врахуйте це у ваших алгоритмах.

автор: Bond
Нотатка

Якщо ви бажаєте знайти натуральний логарифм самого числа (не збільшеного на одиницю), використовуйте метод Math.log(). Не плутайте ці два методи, оскільки результати будуть відрізнятися.

Приклад:

console.log(Math.log1p(5)); // Результат для числа 6
console.log(Math.log(5));   // Результат для числа 5
автор: Bond

Синтаксис

Math.log1p(x)

Параметри

x

Число, яке має бути більше або рівне -1.

автор: Bond

Повернення

logarithm

Повертає натуральний логарифм (з основою e) значення x + 1. Якщо x дорівнює -1, метод повертає -Infinity, а якщо x менше -1 - повертає NaN.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
38 25 8 25 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
38 38 25 8
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.12.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі користувач може ввести число у текстовому полі, натиснути кнопку "Розрахувати" і побачити результат використання методу Math.log1p(). Якщо введене значення некоректне, користувач отримає повідомлення про помилку.

автор: Bond

У цьому прикладі ми обчислюємо природний логарифм відсоткового зростання. Для обчислення відсоткового зростання ми віднімаємо початкове значення від кінцевого і ділимо результат на початкове значення. Використовуючи 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
автор: Bond

У цьому прикладі ми перетворюємо значення слайдера на логарифмічну шкалу. Це корисно, коли хочете, щоб низькі значення слайдера були більш "чутливими" або "градієнтними" в порівнянні з високими значеннями. Застосовуючи 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, оскільки ми використовуємо логарифмічну шкалу
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід