◐ Shell
clean mode source ↗

std::copysign, std::copysignf, std::copysignl - cppreference.com

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)

long double copysign ( long double mag, long double sgn );

(4) (desde C++11)
(constexpr since C++23)

long double copysignl( long double mag, long double 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 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

Véase también