std::copysign, std::copysignf, std::copysignl
De cppreference.com
Definido en el archivo de encabezado <cmath> | ||
float copysign (float mag, float sgn ); | (1) | (desde C++11) (constexpr since C++23) |
float copysignf(float mag, float sgn ); | (2) | (desde C++11) (constexpr since C++23) |
double copysign (double mag, double sgn ); | (3) | (desde C++11) (constexpr since C++23) |
longdouble copysign (longdouble mag, longdouble sgn ); | (4) | (desde C++11) (constexpr since C++23) |
longdouble copysignl(longdouble mag, longdouble sgn ); | (5) | (desde C++11) (constexpr since C++23) |
Promovido copysign ( Aritmético1 mag, Aritmético2 sgn ); | (6) | (desde C++11) (constexpr since C++23) |
1-5) Compone un valor de punto flotante con la magnitud de
mag
y el signo de sgn
. 6) Un conjunto de sobrecargas o una función de plantilla para todas las combinaciones de argumentos de tipo aritmético no cubiertas por (1-5). Si cualquier argumento es de tipo entero, se convierte a double. Si cualquier argumento es longdouble, entonces el tipo de retorno
Promovido
también es longdouble; de lo contrario, el tipo de retorno es siempre double.Contenido |
[editar]Parámetros
mag, sgn | - | Valores de punto flotante. |
[editar]Valor de retorno
Si no ocurren errores, se devuelve el valor de punto flotante con la magnitud de mag
y el signo de sgn
.
Si mag
es NaN, entonces se devuelve NaN con el signo de sgn
.
Si sgn
es -0, el resultado solo es negativo si la implementación admite el cero con signo de forma consistente en las operaciones aritméticas.
[editar]Manejo de errores
Esta función no está sujeta a ninguno de los errores especificados en math_errhandling.
Si la implementación admite la aritmética de punto flotante de la IEEE (IEC 60559):
- El valor devuelto es exacto (nunca se genera FE_INEXACT) e independiente del modo de redondeo actual.
[editar]Notas
std::copysign
es la única manera portátil de manipular el signo de un valor NaN (también puede usarse signbit para examinar el signo de un NaN).
[editar]Ejemplo
Ejecuta este código
#include <iostream>#include <cmath> int main(){std::cout<<std::showpos<<"copysign(1.0,+2.0) = "<< std::copysign(1.0,+2.0)<<'\n'<<"copysign(1.0,-2.0) = "<< std::copysign(1.0,-2.0)<<'\n'<<"copysign(inf,-2.0) = "<< std::copysign(INFINITY,-2.0)<<'\n'<<"copysign(NaN,-2.0) = "<< std::copysign(NAN,-2.0)<<'\n';}
Salida:
copysign(1.0,+2.0) = 1 copysign(1.0,-2.0) = -1 copysign(inf,-2.0) = -inf copysign(NaN,-2.0) = -nan
[editar]Véase también
(C++11)(C++11) | Valor absoluto de un valor de punto flotante (|x|) (función) |
(C++11) | Comprueba si el número dado es negativo (función) |
Documentación de C para copysign |