# C++ fma()

The fma() function takes three arguments x, y and z, and returns x*y+z without losing precision

This function is defined in <cmath> header file.

## fma() prototype [As of C++ 11 standard]

```double fma(double x, double y, double z);
float fma(float x, float y, float z);
long double fma(long double x, long double y, long double z);
Promoted fma(Type1 x, Type2 y, Type z); // For combinations of arithmetic types
```

Since C++11, if any argument passed to fma() is `long double`, the return type Promoted is `long double`. If not, the return type Promoted is `double`.

`[Mathematics] x*y+z = fma(x, y, z) [C++ Programming]`

## fma() Parameters

The fma() takes three arguments.

• x - The first argument to be multiplied.
• y -  The second argument to be multiplied with x.
• z - The third argument to be added to the product of x and y.

## fma() Return Value

The fma() function returns `x*y+z` as if calculated to infinite precision and rounded once to fit the result type.

## Example: How fma() works?

``````#include <cmath>
using namespace std;

int main()
{
double x = 2.0, y = 3.1, z = 3.0, result;
result = fma(x, y, z);
cout << "fma(x, y, z) = " << result << endl;

long double xLD = 3.4, resultLD;
resultLD = fma(xLD, y, z);
cout << "fma(xLD, y, z) = " << resultLD << endl;

return 0;
}``````

When you run the program, the output will be:

```fma(x, y, z) = 9.2
fma(xLD, y, z) = 13.54```