Previous: FP Comparison Functions, Up: Arithmetic Functions [Contents][Index]
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.
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The 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.
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The 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.
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return
whichever of the two values x and y has the smaller absolute
value. If both have the same absolute value, or either is NaN, they
behave the same as the fmin
functions.
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014, return whichever of the two
values x and y has the greater absolute value. If both
have the same absolute value, or either is NaN, they behave the same
as the fmax
functions.
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The fdim
function returns the positive difference between
x and y. The positive difference is x -
y if x is greater than y, and 0 otherwise.
If x, y, or both are NaN, NaN is returned.
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The fma
function performs floating-point multiply-add. This is
the operation (x · 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.
Previous: FP Comparison Functions, Up: Arithmetic Functions [Contents][Index]