Гиперболические и специальные функции
Гиперболические и специальные функции
Технический фундамент специальных функций
Продвинутые функции Math особенно чувствительны к корректности входа. Перед вызовом важно понимать область определения:
- логарифмы требуют строго положительные значения;
- корни и обратные тригонометрические функции имеют ограничения по аргументам;
- low-level методы (
imul,clz32,fround) работают в рамках 32-битной модели.
Фундаментальный подход: сначала проверка домена аргументов, затем вычисление.
Почему этот урок нужен, даже если функции «редкие»
Гиперболические и специальные методы Math встречаются реже базовых, но они полезны в аналитике, инженерных расчетах, обработке сигналов, некоторых ML-задачах и низкоуровневых оптимизациях.
Смотри, что важно: цель урока не в том, чтобы запомнить все формулы, а в том, чтобы понимать, какой инструмент когда применять.
Гиперболические функции
console.log(Math.sinh(1));
console.log(Math.cosh(1));
console.log(Math.tanh(1));
Новый термин: гиперболические функции — аналоги sin/cos/tan, но связанные с гиперболой, а не окружностью.
Практически чаще всего из этой группы используют Math.tanh для «сжатия» значения в диапазон (-1, 1).
Экспонента и логарифмы
console.log(Math.exp(1)); // e^1
console.log(Math.log(Math.E)); // 1
console.log(Math.log10(1000)); // 3
console.log(Math.log2(8)); // 3
exp(x)— экспонентаe^x;log(x)— натуральный логарифм;log10(x)иlog2(x)— логарифмы по основанию 10 и 2.
Здесь часто путаются: логарифм от отрицательного числа даст NaN, а логарифм от 0 даст -Infinity.
console.log(Math.log(-1)); // NaN
console.log(Math.log(0)); // -Infinity
Специальные методы
console.log(Math.sign(-12)); // -1
console.log(Math.sign(0)); // 0
console.log(Math.fround(1.337)); // float32 версия
console.log(Math.imul(2, 4)); // 8
console.log(Math.clz32(1)); // 31
signвозвращает знак числа;froundприводит число к точностиfloat32;imul— 32-битное целочисленное умножение;clz32— количество ведущих нулей в 32-битном представлении.
Проверь себя: какой результат даст Math.sign(-0) и почему это может быть важно в edge-case вычислениях?
Подсказка: Math.sign(-0) вернет -0. Это редкий, но реальный edge case в number. Проверять отличие 0 и -0 можно через Object.is.
console.log(Math.sign(-0)); // -0
console.log(Object.is(Math.sign(-0), -0)); // true
console.log(1 / Math.sign(-0)); // -Infinity
Микро-сценарии
- Определение направления изменения метрики.
function getDirection(delta) {
return Math.sign(delta); // -1, 0, 1
}
- Работа с логарифмической шкалой графика.
function toLogScale(value) {
return Math.log10(value);
}
- Безопасный логарифм с явной проверкой области определения.
function safeLog10(value) {
if (!Number.isFinite(value) || value <= 0) return null;
return Math.log10(value);
}
Типичные ошибки
- Использовать сложные функции «для красоты», когда хватает простых.
- Не проверять область определения (
log,sqrtи т.д.). - Игнорировать погрешность float-арифметики.
- Путать математический смысл и бизнес-правило.
Анти-провал: если метод выглядит «редким», сначала зафиксируй, какую конкретную проблему он решает в твоей задаче.
Краткий итог
- В
Mathесть продвинутые функции для специальных расчетов. - Практически полезны
exp,log,sign,fround. - Эти методы требуют аккуратной работы с входами.
- Используй их только по назначению, а не «по привычке».
- Понимание специальных функций расширяет твой инженерный инструментарий.