## Name

fma — perform a fused multiply-add operation

## Declaration

`genType fma(` | genType a,
| genType b,
| genType c`)`;

`genDType fma(` | genDType a,
| genDType b,
| genDType c`)`;

## Parameters

`a`

  Specifies the first multiplicand.

`b`

  Specifies the second multiplicand.

`c`

  Specifies the value to be added to the result.

## Description

`fma` performs, where possible, a fused multiply-add operation, returning `a * b + c`. In use cases where the return value is eventually consumed by a variable declared as `precise`:

- `fma`() is considered a single operation, whereas the expression `a * b + c` consumed by a variable declared as `precise` is considered two operations.

- The precision of `fma`() can differ from the precision of the expression `a * b + c`.

- `fma`() will be computed with the same precision as any other `fma`() consumed by a `precise` variable, giving invariant results for the same input values of `a`, `b` and `c`.

Otherwise, in the absense of `precise` consumption, there are no special constraints on the number of operations or difference in precision between `fma`() and the expression `a * b + c`.

## Version Support

| OpenGL Shading Language Version
--- | ---
Function Name | 1.10 | 1.20 | 1.30 | 1.40 | 1.50 | 3.30 | 4.00 | 4.10 | 4.20 | 4.30 | 4.40 | 4.50
fma (genType) | - | - | - | - | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
fma (genDType) | - | - | - | - | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔

## Copyright

Copyright © 2011-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.