Entiende el código bien antes de adaptarlo a tu trabajo y si ttienes algo que aportar puedes dejarlo en la sección de comentarios.
los Math.hypot()
La función devuelve la raíz cuadrada de la suma de los cuadrados de sus argumentos, es decir:
Sintaxis
Math.hypot() Math.hypot(value0) Math.hypot(value0, value1) Math.hypot(value0, value1,..., valueN)
Parámetros
value1, value2, ...
- Números.
Valor devuelto
La raíz cuadrada de la suma de cuadrados de los argumentos dados. Si al menos uno de los argumentos no se puede convertir en un número, NaN
es regresado.
Descripción
Para calcular la hipotenusa de un triángulo rectángulo, o la magnitud de un número complejo, se usa la fórmula Math.sqrt(v1*v1 + v2*v2)
, donde v1 y v2 son las longitudes de los catetos del triángulo, o los componentes real y complejo del número complejo. La distancia correspondiente en 2 o más dimensiones se puede calcular agregando más cuadrados debajo de la raíz cuadrada: Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4)
.
Esta función hace que este cálculo sea más fácil y rápido; llama Math.hypot(v1, v2)
, o Math.hypot(v1, v2, v3, v4, ...)
.
Math.hypot
también evita problemas de desbordamiento / subdesbordamiento si la magnitud de sus números es muy grande. El número más grande que puede representar en JS es Number.MAX_VALUE
, que es alrededor de 10308. Si sus números son mayores de aproximadamente 10154, tomar el cuadrado de ellos resultará en Infinito. Por ejemplo, Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinity
. Si utiliza hypot()
en cambio, obtienes una mejor respuesta: Math.hypot(1e200, 1e200) = 1.4142...e+200
. Esto también es true con números muy pequeños. Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0
, pero Math.hypot(1e-200, 1e-200) = 1.4142...e-200
.
Porque hypot()
es un static método de Math
, siempre lo usas como Math.hypot()
, más que como un método de Math
objeto que creasteMath
no es un constructor).
Si no se dan argumentos, el resultado es +0. Si alguno de los argumentos es ± Infinito, el resultado es Infinito. Si alguno de los argumentos es NaN (a menos que otro argumento sea ± Infinito), el resultado es NaN. Si al menos uno de los argumentos no se puede convertir en un número, el resultado es NaN
.
Con un argumento, Math.hypot()
es equivalente a Math.abs()
.
Ejemplos de
Usando 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, since +'foo' => NaN Math.hypot(3,4,'5');// 7.0710678118654755, +'5' => 5 Math.hypot(-3);// 3, the same as Math.abs(-3)
Polyfill
Un enfoque ingenuo que no maneja problemas de desbordamiento / subdesbordamiento:
if(!Math.hypot) Math.hypot=function()var y =0, i = arguments.length, containsInfinity =false;while(i--)return containsInfinity ?Infinity: Math.sqrt(y)
Un polyfill que evita subdesbordamientos y desbordamientos:
if(!Math.hypot) Math.hypot=function()var max =0;var s =0;var containsInfinity =false;for(var i =0; i < arguments.length;++i)var arg = Math.abs(Number(arguments[i]));if(arg ===Infinity) containsInfinity =trueif(arg > max) s *=(max / arg)*(max / arg); max = arg; s += arg ===0&& max ===0?0:(arg / max)*(arg / max);return containsInfinity ?Infinity:(max ===1/0?1/0: max * Math.sqrt(s));;
Especificaciones
Especificación |
---|
Especificación del lenguaje ECMAScript (ECMAScript) # sec-math.hypot |
Compatibilidad del navegador
Escritorio | Móvil | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Cromo | Borde | Firefox | explorador de Internet | Ópera | Safari | WebView Android | Chrome Android | Firefox para Android | Opera Android | Safari en IOS | Internet de Samsung | |
hypot |
38 | 12 | 27 | No | 25 | 8 | 38 | 38 | 27 | 25 | 8 | 3,0 |
Ver también
Math.abs()
Math.pow()
Math.sqrt()
valoraciones y reseñas
Si crees que ha sido provechoso este artículo, te agradeceríamos que lo compartas con otros programadores así nos ayudas a dar difusión a este contenido.