Math.hypot()
Статичний метод Math.hypot() повертає квадратний корінь з суми квадратів її аргументів, а саме:
Спробуйте його в дії
Синтаксис
Math.hypot()
Math.hypot(value1)
Math.hypot(value1, value2)
Math.hypot(value1, value2, /* …, */ valueN)
Параметри
value1, …,valueNЧисла.
Повернене значення
Квадратний корінь з суми квадратів переданих аргументів. Повертає Infinity, якщо будь-який з аргументів – ±Infinity. Інакше, якщо принаймні один з аргументів є або зводиться до NaN, повертає NaN. Повертає 0, якщо не передані жодні аргументи або всі аргументи дорівнюють ±0.
Опис
Обчислення гіпотенузи прямокутного трикутника, або модуля комплексного числа — в обох випадках використовується формула Math.sqrt(v1*v1 + v2*v2), де v1 та v2 — це довжини сторін трикутника, або ж дійсна та уявна складові комплексного числа. Та ж відстань у двох чи більше вимірах може бути обчислена шляхом додавання нових квадратів під коренем: Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4).
Ця функція робить такі обчислення простішими й швидшими: достатньо просто викликати Math.hypot(v1, v2) чи Math.hypot(v1, /* …, */, vN).
Math.hypot також дає змогу уникнути проблеми переповнення чи зникнення розряду, якщо величина чисел дуже велика. Найбільше число, яке можна представити засобами JS — це Number.MAX_VALUE, що приблизно дорівнює 10308. Якщо числа більші за 10154, то спроба піднести їх до квадрата дасть в результаті Infinity. Наприклад, Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinity. Якщо ж натомість використати hypot(), результат буде значно кращий: Math.hypot(1e200, 1e200) = 1.4142...e+200. Це також справедливо і для дуже малих чисел. Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0, проте Math.hypot(1e-200, 1e-200) = 1.4142...e-200.
Отримуючи один аргумент, Math.hypot() рівносильний Math.abs(). Math.hypot.length дорівнює 2, що натякає на те, що цей метод задуманий для обробки щонайменше двох параметрів.
Оскільки hypot() — це статичний метод об'єкта Math, його потрібно завжди використовувати через Math.hypot(). Не слід звертатись до нього як до методу власноруч створеного екземпляра Math (Math не є конструктором).
Приклади
Застосування Math.hypot()
Math.hypot(3, 4); // 5
Math.hypot(3, 4, 5); // 7.0710678118654755
Math.hypot(); // 0
Math.hypot(NaN); // NaN
Math.hypot(NaN, Infinity); // Infinity
Math.hypot(3, 4, "foo"); // NaN, оскільки +'foo' => NaN
Math.hypot(3, 4, "5"); // 7.0710678118654755, +'5' => 5
Math.hypot(-3); // 3, еквівалентно до Math.abs(-3)
Специфікації
Сумісність із браузерами
| desktop | mobile | server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
hypot
|
Chrome Full support 38 | Edge Full support 12 | Firefox Full support 27 | Internet Explorer No support Ні | Opera Full support 25 | Safari Full support 8 | WebView Android Full support 38 | Chrome Android Full support 38 | Firefox for Android Full support 27 | Opera Android Full support 25 | Safari on iOS Full support 8 | Samsung Internet Full support 3.0 | Deno Full support 1.0 | Node.js Full support 0.12.0 |