2011 Khronos Group
fma 3G
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

#VARTABLECOLS#
#FUNCTABLEHEADER#
fma (genType)#newin11#
fma (genDType)#newin40#

## Copyright

Copyright 2011 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/.