Espacios de nombres
Variantes
Acciones

std::hypot, std::hypotf, std::hypotl

De cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
Funciones matemáticas comunes
Funciones
Operaciones básicas
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones exponenciales
(C++11)
(C++11)
(C++11)
(C++11)
Funciones de potencias
(C++11)
hypot
(C++11)
Funciones trigonométricas e hiperbólicas
(C++11)
(C++11)
(C++11)
Funciones de error y gamma
(C++11)
(C++11)
(C++11)
(C++11)
Operaciones de punto flotante del entero más cercano
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones de manipulación de punto flotante
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
Clasificación/comparación
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Constantes de macro
(C++11)(C++11)(C++11)(C++11)(C++11)
 
Definido en el archivo de encabezado <cmath>
float       hypot ( float x, float y );
float       hypotf( float x, float y );
(1) (desde C++11)
double      hypot ( double x, double y );
(2) (desde C++11)
long double hypot ( long double x, long double y );
long double hypotl( long double x, long double y );
(3) (desde C++11)
Promovido   hypot ( Aritmético1 x, Arithmetic2 y );
(4) (desde C++11)
float       hypot ( float x, float y, float z );
(5) (desde C++17)
double      hypot ( double x, double y, double z );
(6) (desde C++17)
long double hypot ( long double x, long double y, long double z );
(7) (desde C++17)
Promovido   hypot ( Aritmético1 x, Arithmetic2 y, Arithmetic3 z );
(8) (desde C++17)
1-3) Calcula la raíz cuadrada de la suma de los cuadrados de x e y, sin desbordamiento ni subdesbordamiento indebidos en las etapas intermedias del cálculo.
4) Un conjunto de sobrecargas o una plantilla de función para todas las combinaciones de argumentos de tipo aritmético no cubiertas por (1-3). Si algún argumento tiene tipo entero, se convierte a double. Si cualquier otro argumento es long double, entonces el tipo de retorno es long double, de lo contrario es double.
5-7) Calcula la raíz cuadrada de la suma de los cuadrados de x, y, y z, sin desbordamiento ni subdesbordamiento indebidos en las etapas intermedias del cálculo.
8) Un conjunto de sobrecargas o una plantilla de función para todas las combinaciones de argumentos de tipo aritmético no cubiertas por (5-7). Si algún argumento tiene tipo entero, se convierte a double. Si cualquier otro argumento es long double, entonces el tipo de retorno es long double, de lo contrario es double.

El valor calculado por la versión de dos argumentos de esta función es la longitud de la hipotenusa de un triángulo rectángulo con lados de longitud x e y, o la distancia del punto (x,y) desde el origen (0,0), o la magnitud de un número complejo x+iy.

El valor calculado por la versión de tres argumentos de esta función es la distancia del punto (x,y,z) desde el origen (0,0,0).

Contenido

[editar] Parámetros

x, y, z - Valores de tipos de punto flotante o tipos enteros.

[editar] Valor de retorno

1-4) Si no se producen errores, se devuelve la hipotenusa de un triángulo rectángulo, x2
+y2
.
5-8) Si no se producen errores, se devuelve la distancia del origen en un espacio en tridimensional, x2
+y2
+z2
.

Si se produce un error de rango debido a desbordamiento, se devuelve +HUGE_VAL, +HUGE_VALF, o +HUGE_VALL.

Si se produce un error de rango debido a desbordamiento, se devuelve el resultado correcto (después del redondeo).

[editar] Manejo de errores

Los errores se informan como se especifica en math_errhandling.

Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):

  • hypot(x, y), hypot(y, x), y hypot(x, -y) son equivalentes.
  • Si uno de los argumentos es +0 o -0, hypot(x,y) es equivalente a fabs llamada con el argumento distinto de cero.
  • Si uno de los argumentos es +∞ o -∞, hypot(x,y) devuelve +∞ incluso si el otro argumento es NaN.
  • De lo contrario, si cualquiera de los argumentos es NaN, se devuelve NaN.

[editar] Notas

Las implementaciones generalmente garantizan una precisión de menos de 1 ulp (unidades en el último lugar): GNU, BSD.

std::hypot(x, y) es equivalente a std::abs(std::complex<double>(x,y)).

POSIX especifica que el subdesbordamiento solo se puede producir cuando ambos argumentos son subnormales y el resultado correcto también es subnormal (esto prohíbe implementaciones ingenuas).

La distancia entre dos puntos (x1,y1,z1) y (x2,y2,z2) en un espacio tridimensional puede calcularse usando la sobrecarga de tres argumentos de std::hypot como std::hypot(x2-x1, y2-y1, z2-z1).


Macro de Prueba de característica
__cpp_lib_hypot
(desde C++17)

[editar] Ejemplo

#include <iostream>
#include <cmath>
#include <cerrno>
#include <cfenv>
#include <cfloat>
#include <cstring>
 
// #pragma STDC FENV_ACCESS ON
int main()
{
    // uso típico
    std::cout << "(1,1) cartesiano es (" << std::hypot(1,1)
              << ',' << std::atan2(1,1) << ") polar\n";
    struct Point3D { float x, y, z; } a{3.14,2.71,9.87}, b{1.14,5.71,3.87};
    // C++17 tiene la sobrecarga de hypot con tres argumentos:
    std::cout << "distancia(a,b) = " << std::hypot(a.x-b.x,a.y-b.y,a.z-b.z) << '\n';
    // valores especiales
    std::cout << "hypot(NAN,INFINITY) = " << std::hypot(NAN,INFINITY) << '\n';
    // manejo de errores
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "hypot(DBL_MAX,DBL_MAX) = " << std::hypot(DBL_MAX,DBL_MAX) << '\n';
    if (errno == ERANGE)
        std::cout << "    errno = ERANGE " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_OVERFLOW))
        std::cout << "    Se generó FE_OVERFLOW\n";
}

Salida:

(1,1) cartesiano es (1.41421,0.785398) polar
distancia(a,b) = 7
hypot(NAN,INFINITY) = inf
hypot(DBL_MAX,DBL_MAX) = inf
    errno = ERANGE Resultado numérico fuera de rango
    Se generó FE_OVERFLOW

[editar] Véase también

(C++11)(C++11)
Eleva un número a la potencia dada (xy)
(función) [editar]
(C++11)(C++11)
Calcula la raíz cuadrada (x)
(función) [editar]
(C++11)(C++11)(C++11)
Calcula la raíz cúbica (3x)
(función) [editar]
Devuelve la magnitud de un número complejo.
(plantilla de función) [editar]