Math.hypot()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
A função Math.hypot()
retorna a raiz quadrada do somátorio do quadrado de seus parâmetros, ou seja
Sintaxe
Math.hypot([value1[, value2[, ...]]])
Parâmetros
value1, value2, ...
Números.
Valor retornado
A raiz quadrada do somátorio do quadrado dos parâmetros recebidos. Se um ou mais argumentos não puderem ser convertidos para um número, NaN
é retornado.
Descrição
Para calcular a hipotenusa de um triângulo retângulo, ou o módulo de um número complexo, é usada a fórmula Math.sqrt(v1*v1 + v2*v2)
() onde v1 e v2 são, ou os lados de um triângulo, ou a parte real e a imaginário de um número complexo. Para calcular a distância entre duas ou mais dimensões, basta adicionar mais exponenciações dentro da raiz quadrada, por exemplo Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4)
().
A função Math.hypot() torna esta tarefa mais rápida e mais fácil, basta executar Math.hypot(v1, v2)
, or Math.hypot(v1, v2, v3, v4, ...)
.
Dessa maneira também se evita problemas se a magnitude dos seus número for muito grande. O maio número que se pode representar em um double float em JavasScript é Number.MAX_VALUE
= 1.797...e+308. Se os seu números são maior que 1e154, calcular o quadrado deles resultará em Infinity
, estragando os seus resultados. Por exemplo, Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinity
. Se você usar a função Math.hypot()
, você receberá uma resposta aceitável: Math.hypot(1e200, 1e200) = 1.4142...e+200
. Isto também é verdade para número muito pequenos. Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0
, mas Math.hypot(1e-200, 1e-200) = 1.4142...e-200
é uma boa resposta.
Nota: Por hypot()
ser um método estático de Math
, deve-se sempre usá-lo como Math.hypot()
, e não como um método de um objeto Math
que você criou.
Se nenhum parâmetro for passado, o resultado é +0.
Se um ou mais parâmetros não puderem ser convertidos para um número, o resultado será NaN
.
Com apenas um parâmetro, Math.hypot()
se comporta como Math.abs()
.
Examples
Usando Math.hypot()
Math.hypot(3, 4); // 5 Math.hypot(3, 4, 5); // 7.0710678118654755 Math.hypot(); // 0 Math.hypot(NaN); // NaN Math.hypot(3, 4, "foo"); // NaN, +'foo' => NaN Math.hypot(3, 4, "5"); // 7.0710678118654755, +'5' => 5 Math.hypot(-3); // 3, the same as Math.abs(-3)
Polyfill
O comportamento de Math.hypot()
pode ser emulado com a seguinte função:
Math.hypot = Math.hypot || function () { var y = 0; var length = arguments.length; for (var i = 0; i < length; i++) { if (arguments[i] === Infinity || arguments[i] === -Infinity) { return Infinity; } y += arguments[i] * arguments[i]; } return Math.sqrt(y); };
Especificações
Specification |
---|
ECMAScript® 2026 Language Specification # sec-math.hypot |