Chapter Contents |
Previous |
Next |
fma |
Portability: | C99 |
SYNOPSIS | |
DESCRIPTION | |
RETURN VALUE | |
IMPLEMENTATIONS | |
DIAGNOSTICS | |
SEE ALSO |
SYNOPSIS |
#include <math.h> 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);
DESCRIPTION |
fma
computes x*y+z
as if it was a single operation rounded according to
the current rounding mode. For binary floating point, the performance of fma
will be better than the performance of the equivalent
expression, so long as a #undef
is not used
to undefine fma
. For hexadecimal floating
point, fma performs considerably worse than the defining expression above.
The symbol FP_FAST_FMA can be tested to portably determine if the use of fma
is advantageous.
The function name fmaf
should
be used
for float
arguments, and fmal
for long double
arguments.
Alternately, if the header file tgmath.h
is
included, fma
may be used with any numeric
argument type.
RETURN VALUE |
fma
returns x*y+z
, computed as a single operation, if it is expressible
in the return type.
IMPLEMENTATIONS |
For binary floating-point, fma
is implemented as a built-in function unless it is undefined by a #undef
statement.
DIAGNOSTICS |
For binary floating point, if the fma
function is not undefined, any floating-point exceptions produced during its
execution will be raised in the normal fashion, perhaps with trapping. No
diagnostic message will be generated, and errno
will not be set. If the built-in fma
is undefined,
overflow or underflow will cause a diagnostic message to be generated, and
trapping will not occur.
The error behavior for hexadecimal floating point is the same as for
binary when the built-in function is undefined, that is, errors will be diagnosed,
and errno
will be set.
SEE ALSO |
"Mathematical Functions" in Chapter 2, "Function Categories"
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright © 2004 by SAS Institute Inc., Cary, NC, USA. All rights reserved.