std::copysign, std::copysignf, std::copysignl - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++11) (constexpr since C++23) |
|
|
(2) | (desde C++11) (constexpr since C++23) |
|
|
(3) | (desde C++11) (constexpr since C++23) |
|
|
(4) | (desde C++11) (constexpr since C++23) |
|
|
(5) | (desde C++11) (constexpr since C++23) |
|
|
(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 long double, entonces el tipo de retorno Promovido también es long double; de lo contrario, el tipo de retorno es siempre double.
Parámetros
| mag, sgn | - | Valores de punto flotante. |
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.
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.
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).
Ejemplo
#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