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.
— Function: float fminf (float x, float y)
— Function: long double fminl (long double x, long double y)
fminfunction 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.
— Function: float fmaf (float x, float y, float z)
— Function: long double fmal (long double x, long double y, long double z)
fmafunction 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.
fmalets you choose when you want to round only once.
On processors which do not implement multiply-add in hardware,
fmacan be very slow since it must avoid intermediate rounding. math.h defines the symbols
FP_FAST_FMALwhen the corresponding version of
fmais no slower than the expression ‘x*y + z’. In the GNU C Library, this always means the operation is implemented in hardware.