std::sqrt, std::sqrtf, std::sqrtl
Definido en el archivo de encabezado <cmath> | ||
(1) | ||
float sqrt (float arg ); | ||
float sqrtf(float arg ); | (desde C++11) | |
double sqrt (double arg ); | (2) | |
(3) | ||
longdouble sqrt (longdouble arg ); | ||
longdouble sqrtl(longdouble arg ); | (desde C++11) | |
double sqrt ( TipoEntero arg ); | (4) | (desde C++11) |
arg
.Contenido |
[editar]Parámetros
arg | - | Valor de un tipo de punto flotante o un tipo entero. |
[editar]Valor de retorno
Si no se producen errores, se devuelve la raíz cuadrada de arg
(√arg).
Si se produce un error de dominio, se devuelve un valor definido por la implementación (NaN donde se dé apoyo).
Si se produce un error debido a subdesbordamiento, se devuelve el resultado correcto (después del redondeo).
[editar]Manejo de errores
Los errores se informan como se especifica en math_errhandling
Se produce un error de dominio si arg
es menor que cero.
Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):
- Si el argumento es menor que -0, se genera FE_INVALID y se devuelve NaN.
- Si el argumento es +∞, +0 o -0, se devuelve +∞, +0 o -0, respectivamente.
- Si el argumento es NaN, se devuelve NaN.
[editar]Notas
El estándar IEEE requiere que std::sqrt
sea exacta. Las únicas otras operaciones requeridas para ser exactas son los operadores aritméticos y la función std::fma. Después de redondear al tipo de retorno (utilizando el modo de redondeo por defecto), el resultado de std::sqrt
es indistinguible del resultado infinitamente preciso. En otras palabras, el error es inferior a 0.5 ulp. Otras funciones, incluidas std::pow, no están tan limitadas.
[editar]Ejemplo
#include <iostream>#include <cmath>#include <cerrno>#include <cfenv>#include <cstring> #pragma STDC FENV_ACCESS ON int main(){// normal usestd::cout<<"sqrt(100) = "<< std::sqrt(100)<<'\n'<<"sqrt(2) = "<< std::sqrt(2)<<'\n'<<"golden ratio = "<<(1+std::sqrt(5))/2<<'\n';// valores especialesstd::cout<<"sqrt(-0) = "<< std::sqrt(-0.0)<<'\n';// manejo de erroreserrno=0;std::feclearexcept(FE_ALL_EXCEPT);std::cout<<"sqrt(-1.0) = "<< std::sqrt(-1)<<'\n';if(errno==EDOM)std::cout<<" errno = EDOM "<<std::strerror(errno)<<'\n';if(std::fetestexcept(FE_INVALID))std::cout<<" Se generó FE_INVALID\n";}
Posible salida:
sqrt(100) = 10 sqrt(2) = 1.41421 golden ratio = 1.61803 sqrt(-0) = -0 sqrt(-1.0) = -nan errno = EDOM Argumento numérico fuera de dominio Se generó FE_INVALID
[editar]Véase también
(C++11)(C++11) | Eleva un número a la potencia dada (xy) (función) |
(C++11)(C++11)(C++11) | Calcula la raíz cúbica (3√x) (función) |
(C++11)(C++11)(C++11) | Calcula la raíz cuadrada de la suma de los cuadrados de dos o tres (C++17) números dados (√x2 +y2 ), (√x2 +y2 +z2 ) (función) |
Raíz cuadrada en el rango del plano medio derecho. (plantilla de función) | |
Se aplica la función std::sqrt a cada elemento de valarray. (plantilla de función) | |
Documentación de C para sqrt |