##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::fma

From cppreference.com
< cpp‎ | numeric‎ | math

Defined in header `<cmath>` |  |
float fma( float x, float y, float z ); | (1) | (since C++11)
double fma( double x, double y, double z ); | (2) | (since C++11)
long double fma( long double x, long double y, long double z ); | (3) | (since C++11)
Promoted fma( Arithmetic1 x, Arithmetic2 y, Arithmetic3 z ); | (4) | (since C++11)
#define FP_FAST_FMA /* implementation-defined */ | (5) | (since C++11)
#define FP_FAST_FMAF /* implementation-defined */ | (6) | (since C++11)
#define FP_FAST_FMAL /* implementation-defined */ | (7) | (since C++11)

The fma functions compute (x*y) + z, rounded as one ternary operation, according to the rounding mode characterized by the value of FLT_ROUNDS.

4) If any argument has integral type, it is cast to double. If any other argument is long double, then the return type is long double, otherwise it is double.

5-7) If the macro constants `FP_FAST_FMAF`, `FP_FAST_FMA`, or `FP_FAST_FMAL` are defined, the function `std::fma` evaluates faster than the expression x*y+z for float, double, and long double arguments, respectively. If defined, these macros evaluate to integer 1.

### [edit] Parameters

x, y, z | - | values of floating-point or integral types

### [edit] Return value

(x*y) + z, rounded as one ternary operation

### [edit] See also

remainder (C++11) | signed remainder of the division operation (function) [edit]
remquo (C++11) | signed remainder as well as the three last bits of the division operation (function) [edit]
C documentation for fma

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/numeric/math/fma&oldid=67119"