Math.hypot()
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.
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 | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Math.hypot' in that specification. |
Padrão | Definição inicial. |
ECMAScript (ECMA-262) The definition of 'Math.hypot' in that specification. |
Padrão em tempo real |
Compatibilidade no navegador
BCD tables only load in the browser
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.