[ Arithmetic | Reference Manual | Alphabetic Index ]

# copysign(+X, +Y, -Result)

Compose a number from magnitude and sign
X
A number
Y
A number
Result
Output: number

## Description

This predicate is used by the ECLiPSe compiler to expand evaluable arithmetic expressions. So the call to copysign(X, Y, Result) is equivalent to
```    Result is copysign(X, Y)
```
which should be preferred for portability.

Result is a number of the same type and absolute value as X, but with the sign of Y. Result is therefore either identical to X or to -X.

This function correctly considers the sign bits of special floating point values, such as -0.0, infinities and NaNs.

In coroutining mode, if X or Y is uninstantiated, the predicate delays.

### Modes and Determinism

• copysign(+, +, -) is det

### Exceptions

(4) instantiation fault
X or Y is not instantiated (non-coroutining mode only).
(20) arithmetic exception
Sign of Y is not known
(24) number expected
Number is not of a numeric type.

## Examples

```Success:
Result is copysign( 3.0, 2.0).	% gives Result =  3.0
Result is copysign( 3.0,-2.0).	% gives Result = -3.0
Result is copysign(-3.0, 2.0).	% gives Result =  3.0
Result is copysign(-3.0,-2.0).	% gives Result = -3.0

Result is copysign( 3.0,-0.0).	% gives Result = -3.0
Result is copysign( 3.0, 0.0).	% gives Result =  3.0
Result is copysign( 3.0, 0).	% gives Result =  3.0

Result is copysign( 3, -1.0).	% gives Result = -3
Result is copysign( 1, -0.0).	% gives Result = -1
Result is copysign( 3.0, -1).	% gives Result = -3.0
Result is copysign(-3.0,  1).	% gives Result =  3.0

Error:
Result is copysign(3.0, -0.1__0.1).	% arithmetic exception
```