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.
double
fmin (double x, double y)
¶float
fminf (float x, float y)
¶long double
fminl (long double x, long double y)
¶_FloatN
fminfN (_FloatN x, _FloatN y)
¶_FloatNx
fminfNx (_FloatNx x, _FloatNx y)
¶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 a quiet NaN, the other argument is returned. If both arguments are NaN, or either is a signaling NaN, NaN is returned.
double
fmax (double x, double y)
¶float
fmaxf (float x, float y)
¶long double
fmaxl (long double x, long double y)
¶_FloatN
fmaxfN (_FloatN x, _FloatN y)
¶_FloatNx
fmaxfNx (_FloatNx x, _FloatNx y)
¶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 a quiet NaN, the other argument is returned. If both arguments are NaN, or either is a signaling NaN, NaN is returned.
double
fminimum (double x, double y)
¶float
fminimumf (float x, float y)
¶long double
fminimuml (long double x, long double y)
¶_FloatN
fminimumfN (_FloatN x, _FloatN y)
¶_FloatNx
fminimumfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The fminimum
function returns the lesser of the two values x
and y. Unlike fmin
, if either argument is a NaN, NaN is returned.
Positive zero is treated as greater than negative zero.
double
fmaximum (double x, double y)
¶float
fmaximumf (float x, float y)
¶long double
fmaximuml (long double x, long double y)
¶_FloatN
fmaximumfN (_FloatN x, _FloatN y)
¶_FloatNx
fmaximumfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The fmaximum
function returns the greater of the two values x
and y. Unlike fmax
, if either argument is a NaN, NaN is returned.
Positive zero is treated as greater than negative zero.
double
fminimum_num (double x, double y)
¶float
fminimum_numf (float x, float y)
¶long double
fminimum_numl (long double x, long double y)
¶_FloatN
fminimum_numfN (_FloatN x, _FloatN y)
¶_FloatNx
fminimum_numfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The fminimum_num
function returns the lesser of the two values
x and y. If one argument is a number and the other is a
NaN, even a signaling NaN, the number is returned. Positive zero is
treated as greater than negative zero.
double
fmaximum_num (double x, double y)
¶float
fmaximum_numf (float x, float y)
¶long double
fmaximum_numl (long double x, long double y)
¶_FloatN
fmaximum_numfN (_FloatN x, _FloatN y)
¶_FloatNx
fmaximum_numfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The fmaximum_num
function returns the greater of the two values
x and y. If one argument is a number and the other is a
NaN, even a signaling NaN, the number is returned. Positive zero is
treated as greater than negative zero.
double
fminmag (double x, double y)
¶float
fminmagf (float x, float y)
¶long double
fminmagl (long double x, long double y)
¶_FloatN
fminmagfN (_FloatN x, _FloatN y)
¶_FloatNx
fminmagfNx (_FloatNx x, _FloatNx y)
¶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.
double
fmaxmag (double x, double y)
¶float
fmaxmagf (float x, float y)
¶long double
fmaxmagl (long double x, long double y)
¶_FloatN
fmaxmagfN (_FloatN x, _FloatN y)
¶_FloatNx
fmaxmagfNx (_FloatNx x, _FloatNx y)
¶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.
double
fminimum_mag (double x, double y)
¶float
fminimum_magf (float x, float y)
¶long double
fminimum_magl (long double x, long double y)
¶_FloatN
fminimum_magfN (_FloatN x, _FloatN y)
¶_FloatNx
fminimum_magfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions 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 fminimum
functions.
double
fmaximum_mag (double x, double y)
¶float
fmaximum_magf (float x, float y)
¶long double
fmaximum_magl (long double x, long double y)
¶_FloatN
fmaximum_magfN (_FloatN x, _FloatN y)
¶_FloatNx
fmaximum_magfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions 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 fmaximum
functions.
double
fminimum_mag_num (double x, double y)
¶float
fminimum_mag_numf (float x, float y)
¶long double
fminimum_mag_numl (long double x, long double y)
¶_FloatN
fminimum_mag_numfN (_FloatN x, _FloatN y)
¶_FloatNx
fminimum_mag_numfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions 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 fminimum_num
functions.
double
fmaximum_mag_num (double x, double y)
¶float
fmaximum_mag_numf (float x, float y)
¶long double
fmaximum_mag_numl (long double x, long double y)
¶_FloatN
fmaximum_mag_numfN (_FloatN x, _FloatN y)
¶_FloatNx
fmaximum_mag_numfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions 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 fmaximum_num
functions.
double
fdim (double x, double y)
¶float
fdimf (float x, float y)
¶long double
fdiml (long double x, long double y)
¶_FloatN
fdimfN (_FloatN x, _FloatN y)
¶_FloatNx
fdimfNx (_FloatNx x, _FloatNx y)
¶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.
double
fma (double x, double y, double z)
¶float
fmaf (float x, float y, float z)
¶long double
fmal (long double x, long double y, long double z)
¶_FloatN
fmafN (_FloatN x, _FloatN y, _FloatN z)
¶_FloatNx
fmafNx (_FloatNx x, _FloatNx y, _FloatNx z)
¶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.
float
fadd (double x, double y)
¶float
faddl (long double x, long double y)
¶double
daddl (long double x, long double y)
¶_FloatM
fMaddfN (_FloatN x, _FloatN y)
¶_FloatM
fMaddfNx (_FloatNx x, _FloatNx y)
¶_FloatMx
fMxaddfN (_FloatN x, _FloatN y)
¶_FloatMx
fMxaddfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return x + y, rounded once to the return type of the function without any intermediate rounding to the type of the arguments.
float
fsub (double x, double y)
¶float
fsubl (long double x, long double y)
¶double
dsubl (long double x, long double y)
¶_FloatM
fMsubfN (_FloatN x, _FloatN y)
¶_FloatM
fMsubfNx (_FloatNx x, _FloatNx y)
¶_FloatMx
fMxsubfN (_FloatN x, _FloatN y)
¶_FloatMx
fMxsubfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return x - y, rounded once to the return type of the function without any intermediate rounding to the type of the arguments.
float
fmul (double x, double y)
¶float
fmull (long double x, long double y)
¶double
dmull (long double x, long double y)
¶_FloatM
fMmulfN (_FloatN x, _FloatN y)
¶_FloatM
fMmulfNx (_FloatNx x, _FloatNx y)
¶_FloatMx
fMxmulfN (_FloatN x, _FloatN y)
¶_FloatMx
fMxmulfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return x * y, rounded once to the return type of the function without any intermediate rounding to the type of the arguments.
float
fdiv (double x, double y)
¶float
fdivl (long double x, long double y)
¶double
ddivl (long double x, long double y)
¶_FloatM
fMdivfN (_FloatN x, _FloatN y)
¶_FloatM
fMdivfNx (_FloatNx x, _FloatNx y)
¶_FloatMx
fMxdivfN (_FloatN x, _FloatN y)
¶_FloatMx
fMxdivfNx (_FloatNx x, _FloatNx y)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return x / y, rounded once to the return type of the function without any intermediate rounding to the type of the arguments.
float
fsqrt (double x)
¶float
fsqrtl (long double x)
¶double
dsqrtl (long double x)
¶_FloatM
fMsqrtfN (_FloatN x)
¶_FloatM
fMsqrtfNx (_FloatNx x)
¶_FloatMx
fMxsqrtfN (_FloatN x)
¶_FloatMx
fMxsqrtfNx (_FloatNx x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return the square root of x, rounded once to the return type of the function without any intermediate rounding to the type of the arguments.
float
ffma (double x, double y, double z)
¶float
ffmal (long double x, long double y, long double z)
¶double
dfmal (long double x, long double y, long double z)
¶_FloatM
fMfmafN (_FloatN x, _FloatN y, _FloatN z)
¶_FloatM
fMfmafNx (_FloatNx x, _FloatNx y, _FloatNx z)
¶_FloatMx
fMxfmafN (_FloatN x, _FloatN y, _FloatN z)
¶_FloatMx
fMxfmafNx (_FloatNx x, _FloatNx y, _FloatNx z)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions, from TS 18661-1:2014 and TS 18661-3:2015, return (x · y) + z, rounded once to the return type of the function without any intermediate rounding to the type of the arguments and without any intermediate rounding of result of the multiplication.