Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
FMA(3)			     Library Functions Manual			  FMA(3)

NAME
     fma, fmaf, fmal -- fused multiply-add

LIBRARY
     Math Library (libm, -lm)

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
     The  fma(),  fmaf(), and fmal() functions return (x * y) + z, computed with
     only one rounding error.  Using the ordinary  multiplication  and	addition
     operators,  by contrast, results in two roundings: one for the intermediate
     product and one for the final result.

     For instance, the expression 1.2e100 * 2.0e208 - 1.4e308 produces	infinity
     due  to overflow in the intermediate product, whereas fma(1.2e100, 2.0e208,
     -1.4e308) returns approximately 1.0e308.

     The fused multiply-add operation is often used to improve the  accuracy  of
     calculations  such as dot products.  It may also be used to improve perfor-
     mance on machines that implement  it  natively.   The  macros  FP_FAST_FMA,
     FP_FAST_FMAF  and	FP_FAST_FMAL may be defined in <math.h> to indicate that
     fma(), fmaf(), and fmal() (respectively) have comparable  or  faster  speed
     than a multiply operation followed by an add operation.

IMPLEMENTATION NOTES
     In  general,  these  routines  will behave as one would expect if x * y + z
     were computed with unbounded precision and range, then rounded to the  pre-
     cision  of the return type.  However, on some platforms, if z is NaN, these
     functions may not raise an exception even when the computation  of  x  *  y
     would have otherwise generated an invalid exception.

SEE ALSO
     fenv(3), math(3)

STANDARDS
     The  fma(),  fmaf(),  and	fmal()	functions  conform  to ISO/IEC 9899:1999
     ("ISO C99").  A fused multiply-add operation with virtually identical char-
     acteristics appears in IEEE draft standard 754R.

HISTORY
     The fma() and fmaf() routines first appeared in FreeBSD 5.4, and fmal() ap-
     peared in FreeBSD 6.0.

FreeBSD 15.1			January 22, 2005			  FMA(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=fmaf&sektion=3&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help