Namespaces
Variants

std:: copysign, std:: copysignf, std:: copysignl

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
(C++11) (C++11)
copysign
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Definido en el encabezado <cmath>
(1)
float copysign ( float mag, float sgn ) ;

double copysign ( double mag, double sgn ) ;

long double copysign ( long double mag, long double sgn ) ;
(hasta C++23)
constexpr /*floating-point-type*/

copysign ( /*floating-point-type*/ mag,

/*floating-point-type*/ sgn ) ;
(desde C++23)
float copysignf ( float mag, float sgn ) ;
(2) (desde C++11)
(constexpr desde C++23)
long double copysignl ( long double mag, long double sgn ) ;
(3) (desde C++11)
(constexpr desde C++23)
Sobrecarga SIMD (desde C++26)
Definido en el encabezado <simd>
template < class V0, class V1 >

constexpr /*math-common-simd-t*/ < V0, V1 >

copysign ( const V0 & v_mag, const V1 & v_sgn ) ;
(S) (desde C++26)
Definido en el encabezado <cmath>
template < class Integer >
double copysign ( Integer mag, Integer sgn ) ;
(A) (constexpr desde C++23)
1-3) Compone un valor de punto flotante con la magnitud de mag y el signo de sgn . La biblioteca proporciona sobrecargas de std::copysign para todos los tipos de punto flotante sin calificadores cv como el tipo de los parámetros. (since C++23)
S) La sobrecarga SIMD realiza un std::copysign elemento por elemento en v_mag y v_sgn .
(Consulte math-common-simd-t para su definición.)
(desde C++26)
A) Se proporcionan sobrecargas adicionales para todos los tipos enteros, los cuales son tratados como double .
(since C++11)

Contenidos

Parámetros

mag, sgn - valores de punto flotante o enteros

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 es negativo solo si la implementación admite el cero con signo de manera consistente en operaciones aritméticas.

Manejo de errores

Esta función no está sujeta a ningún error especificado en math_errhandling .

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

Notas

std::copysign es la única forma portátil de manipular el signo de un valor NaN (para examinar el signo de un NaN, std::signbit también puede usarse).

Las sobrecargas adicionales no requieren ser proporcionadas exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su primer argumento num1 y segundo argumento num2 :

  • Si num1 o num2 tiene tipo long double , entonces std :: copysign ( num1, num2 ) tiene el mismo efecto que std :: copysign ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    .
  • En caso contrario, si num1 y/o num2 tiene tipo double o un tipo entero, entonces std :: copysign ( num1, num2 ) tiene el mismo efecto que std :: copysign ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • En caso contrario, si num1 o num2 tiene tipo float , entonces std :: copysign ( num1, num2 ) tiene el mismo efecto que std :: copysign ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(hasta C++23)

Si num1 y num2 tienen tipos aritméticos, entonces std :: copysign ( num1, num2 ) tiene el mismo efecto que std :: copysign ( static_cast < /*common-floating-point-type*/ > ( num1 ) ,
static_cast < /*common-floating-point-type*/ > ( num2 ) )
, donde /*common-floating-point-type*/ es el tipo de punto flotante con el mayor rango de conversión de punto flotante y mayor subrango de conversión de punto flotante entre los tipos de num1 y num2 , los argumentos de tipo entero se consideran con el mismo rango de conversión de punto flotante que double .

Si no existe tal tipo de punto flotante con el mayor rango y subrango, entonces la resolución de sobrecarga no resulta en un candidato utilizable de las sobrecargas proporcionadas.

(desde C++23)

Ejemplo

#include <cmath>
#include <iostream>
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

valor absoluto de un valor de punto flotante ( |x| )
(función)
(C++11)
verifica si el número dado es negativo
(función)
Documentación C para copysign