std::fdim,std::fdimf,std::fdiml (3) - Linux Manuals

std::fdim,std::fdimf,std::fdiml: std::fdim,std::fdimf,std::fdiml

NAME

std::fdim,std::fdimf,std::fdiml - std::fdim,std::fdimf,std::fdiml

Synopsis


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


1-3) Returns the positive difference between x and y, that is, if x>y, returns x-y, otherwise (if x≤y), returns +0.
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.

Parameters


x, y - values of floating-point or integral_types

Return value


If successful, returns the positive difference between x and y.
If a range error due to overflow occurs, +HUGE_VAL, +HUGE_VALF, or +HUGE_VALL is returned.
If a range error due to underflow occurs, the correct value (after rounding) is returned.

Error handling


Errors are reported as specified in math_errhandling.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),


* If either argument is NaN, NaN is returned

Notes


Equivalent to std::fmax(x-y, 0), except for the NaN handling requirements.

Example


// Run this code


  #include <iostream>
  #include <cmath>
  #include <cerrno>
  #include <cstring>
  #include <cfenv>
  #pragma STDC FENV_ACCESS ON
  int main()
  {
      std::cout << "fdim(4, 1) = " << std::fdim(4, 1)
                << " fdim(1, 4) = " << std::fdim(1, 4) << '\n'
                << "fdim(4,-1) = " << std::fdim(4, -1)
                << " fdim(1,-4) = " << std::fdim(1, -4) << '\n';
      // error handling
      errno = 0;
      std::feclearexcept(FE_ALL_EXCEPT);
      std::cout << "fdim(1e308, -1e308) = " << std::fdim(1e308, -1e308) << '\n';
      if (errno == ERANGE)
          std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n';
      if (std::fetestexcept(FE_OVERFLOW))
          std::cout << " FE_OVERFLOW raised\n";
  }

Output:


  fdim(4, 1) = 3 fdim(1, 4) = 0
  fdim(4,-1) = 5 fdim(1,-4) = 5
  fdim(1e308, -1e308) = inf
      errno == ERANGE: Numerical result out of range
      FE_OVERFLOW raised

See also


abs(int)
labs
llabs computes absolute value of an integral value (|x|)
         (function)


(C++11)


fmax
fmaxf
fmaxl larger of two floating point values
         (function)
(C++11)
(C++11)
(C++11)