The functions in this section perform miscellaneous but common operations that are awkward to express with C operators. On some processors these functions can use special machine instructions to perform these operations faster than the equivalent C code.
fmin
function returns the lesser of the two values x
and y. It is similar to the expression
((x) < (y) ? (x) : (y))
except that x and y are only evaluated once.
If an argument is NaN, the other argument is returned. If both arguments are NaN, NaN is returned.
fmax
function returns the greater of the two values x
and y.
If an argument is NaN, the other argument is returned. If both arguments are NaN, NaN is returned.
fdim
function returns the positive difference between
x and y. The positive difference is @math{x -
y} if x is greater than y, and @math{0} otherwise.
If x, y, or both are NaN, NaN is returned.
fma
function performs floating-point multiply-add. This is
the operation @math{(x @mul{} y) + z}, but the
intermediate result is not rounded to the destination type. This can
sometimes improve the precision of a calculation.
This function was introduced because some processors have a special
instruction to perform multiply-add. The C compiler cannot use it
directly, because the expression `x*y + z' is defined to round the
intermediate result. fma
lets you choose when you want to round
only once.
On processors which do not implement multiply-add in hardware,
fma
can be very slow since it must avoid intermediate rounding.
`math.h' defines the symbols FP_FAST_FMA
,
FP_FAST_FMAF
, and FP_FAST_FMAL
when the corresponding
version of fma
is no slower than the expression `x*y + z'.
In the GNU C library, this always means the operation is implemented in
hardware.
Go to the first, previous, next, last section, table of contents.