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 |