float fdimf( float x, float y );
(1) (since C99)double fdim( double x, double y );
(2) (since C99)long double fdiml( long double x, long double y );
(3) (since C99)#define fdim( x, y )
(4) (since C99)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) Type-generic macro: If any argument has type long double, fdiml
is called. Otherwise, if any argument has integer type or has type double, fdim
is called. Otherwise, fdimf
is called.
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.
[edit] Error handlingErrors are reported as specified in Template:rllpt.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
Equivalent to fmax(x-y, 0) except for the NaN handling requirements.
[edit] Example#include <errno.h> #include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("fdim(4, 1) = %f, fdim(1, 4)=%f\n", fdim(4,1), fdim(1,4)); printf("fdim(4,-1) = %f, fdim(1,-4)=%f\n", fdim(4,-1), fdim(1,-4)); //error handling errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("fdim(1e308, -1e308) = %f\n", fdim(1e308, -1e308)); if (errno == ERANGE) perror(" errno == ERANGE"); if (fetestexcept(FE_OVERFLOW)) puts(" FE_OVERFLOW raised"); }
Possible output:
fdim(4, 1) = 3.000000, fdim(1, 4)=0.000000 fdim(4,-1) = 5.000000, fdim(1,-4)=5.000000 fdim(1e308, -1e308) = inf errno == ERANGE: Numerical result out of range FE_OVERFLOW raised[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4