Гиперболические и специальные функции

Гиперболические и специальные функции

Технический фундамент специальных функций

Продвинутые функции 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

Микро-сценарии

  1. Определение направления изменения метрики.
function getDirection(delta) {
  return Math.sign(delta); // -1, 0, 1
}
  1. Работа с логарифмической шкалой графика.
function toLogScale(value) {
  return Math.log10(value);
}
  1. Безопасный логарифм с явной проверкой области определения.
function safeLog10(value) {
  if (!Number.isFinite(value) || value <= 0) return null;
  return Math.log10(value);
}

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

  • Использовать сложные функции «для красоты», когда хватает простых.
  • Не проверять область определения (log, sqrt и т.д.).
  • Игнорировать погрешность float-арифметики.
  • Путать математический смысл и бизнес-правило.

Анти-провал: если метод выглядит «редким», сначала зафиксируй, какую конкретную проблему он решает в твоей задаче.

Краткий итог

  • В Math есть продвинутые функции для специальных расчетов.
  • Практически полезны exp, log, sign, fround.
  • Эти методы требуют аккуратной работы с входами.
  • Используй их только по назначению, а не «по привычке».
  • Понимание специальных функций расширяет твой инженерный инструментарий.