##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::copysign

From cppreference.com
< cpp‎ | numeric‎ | math

Defined in header `<cmath>` |  |
float copysign( float x, float y ); | (1) | (since C++11)
double copysign( double x, double y ); | (2) | (since C++11)
long double copysign( long double x, long double y ); | (3) | (since C++11)
Promoted copysign( Arithmetic1 x, Arithmetic2 y ); | (4) | (since C++11)

1-3) Composes a floating point value with the magnitude of `x` and the sign of `y`.
4) A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by (1-3). If any argument has integral type, it is cast to double. If any argument is long double, then the return type `Promoted` is also long double, otherwise the return type is always double.

### [edit] Parameters

x, y | - | floating point values

### [edit] Return value

If no errors occur, the floating point value with the magnitude of `x` and the sign of `y` is returned.

If `x` is NaN, then NaN with the sign of `y` is returned.

If `y` is -0, the result is only negative if the implementation supports the signed zero consistently in arithmetic operations.

### [edit] Error handling

This function is not subject to any errors specified in math_errhandling

If the implementation supports IEEE floating-point arithmetic (IEC 60559),

- The returned value is exact (FE_INEXACT is never raised) and independent of the current rounding mode.

### [edit] Notes

`std::copysign` is the only portable way to manipulate the sign of a NaN value (to examine the sign of a NaN, signbit may also be used)

### [edit] Example

Run this code

    #include <iostream>
    #include <cmath>

    int main(void)
    {
        std::cout << "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';
    }

Output:

    copysign(1.0,+2.0) = 1
    copysign(1.0,-2.0) = -1
    copysign(inf,-2.0) = -inf
    copysign(NaN,-2.0) = -nan

### [edit] See also

abs(float) fabs | absolute value of a floating point value (|x|) (function) [edit]
signbit (C++11) | checks if the given number is negative (function) [edit]
C documentation for copysign

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/numeric/math/copysign&oldid=73020"