Math.hypot()
============

A função **`Math.hypot()`** retorna a raiz quadrada do somátorio do quadrado de seus parâmetros, ou seja



Math.hypot
(

v
1

,

v
2

,
…
,

v
n

)

=

∑

i
=
1

n

v
i
2

=

v
1
2

+

v
2
2

+
…
+

v
n
2

\mathtt{\operatorname{Math.hypot}(v

*1, v\_2, \dots, v\_n)} = \sqrt{\sum*{i=1}^n v\_i^2} = \sqrt{v\_1^2 + v\_2^2 + \dots + v\_n^2}

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)` (


v

1
2

+
v

2
2

\sqrt{v1^2 + v2^2}

) 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)` (


v

1
2

+
v

2
2

+
v

3
2

+
v

4
2

\sqrt{v1^2 + v2^2 + v3^2 + v4^2}

).

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()`


```js
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:


```js
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 Language Specification # sec-math.hypot |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Ver também
----------

* `Math.abs()`
* `Math.pow()`
* `Math.sqrt()`