copysign - Linux


copysign modifies the sign bit of a floating-point number. It is primarily used in conjunction with other operations such as comparisons or the fabs function, where it is necessary to ensure that both arguments have the same sign.


copysign(number, sign)
  • number: Floating-point number whose sign will be modified.
  • sign: Floating-point number whose sign will be copied onto number.




  • Change the sign of a number:

    copysign(-1.5, 3.14)  # Result: 1.5
  • Ensure positive sign for a comparison:

    if (copysign(a, b) == copysign(b, a)) {
      // a and b have the same sign

Common Issues

  • Using integers as input may result in unexpected behavior. The copysign function assumes floating-point arguments.
  • The result of copysign is always a floating-point number, even if both input arguments are integers.


copysign can be used in conjunction with other math functions to perform advanced calculations. For example:

# Calculate the absolute value of a complex number
abs_complex() {
  local real=$1
  local imag=$2
  echo "$(copysign 1.0, $real) * $real + (copysign 1.0, $imag) * $imag"

Related Commands

  • fabs: Returns the absolute value of a floating-point number.
  • fmod: Calculates the remainder of a division operation.
  • fmin: Returns the minimum of two floating-point numbers.
  • fmax: Returns the maximum of two floating-point numbers.