| InvalidOperationException | x, y or z is signaling NaN |
| InvalidOperationException | (x, y) = (±∞, ±0.0) or (±0.0, ±∞) |
| InvalidOperationException | x or y is infinite, z is infinite but has opposing sign |
| UnderflowException | result is too small to be represented |
| OverflowException | result is too big to be represented |
| InexactException | the result is inexact |
| x | y | z | fma(x, y, z) |
|---|---|---|---|
| NaN | any | any | NaN |
| any | NaN | any | NaN |
| any | any | NaN | NaN |
| ±∞ | ±0.0 | any | NaN |
| ±0.0 | ±∞ | any | NaN |
| +∞ | >0.0 | -∞ | NaN |
| -∞ | <0.0 | -∞ | NaN |
| -∞ | <0.0 | -∞ | NaN |
| +∞ | >0.0 | -∞ | NaN |
| -∞ | >0.0 | +∞ | NaN |
| +∞ | <0.0 | +∞ | NaN |
| +∞ | <0.0 | +∞ | NaN |
| -∞ | >0.0 | +∞ | NaN |
| >0.0 | +∞ | -∞ | NaN |
| <0.0 | -∞ | -∞ | NaN |
| <0.0 | -∞ | -∞ | NaN |
| >0.0 | +∞ | -∞ | NaN |
| >0.0 | -∞ | +∞ | NaN |
| <0.0 | +∞ | +∞ | NaN |
| <0.0 | +∞ | +∞ | NaN |
| >0.0 | -∞ | +∞ | NaN |
| +∞ | >0.0 | +∞ | +∞ |
| -∞ | <0.0 | +∞ | +∞ |
| +∞ | <0.0 | -∞ | -∞ |
| -∞ | >0.0 | -∞ | -∞ |
| >0.0 | +∞ | +∞ | +∞ |
| <0.0 | -∞ | +∞ | +∞ |
| <0.0 | +∞ | -∞ | -∞ |
| >0.0 | -∞ | -∞ | -∞ |
| +∞ | >0.0 | any | +∞ |
| -∞ | <0.0 | any | +∞ |
| +∞ | <0.0 | any | -∞ |
| -∞ | >0.0 | any | -∞ |
| >0.0 | +∞ | any | +∞ |
| <0.0 | -∞ | any | +∞ |
| <0.0 | +∞ | any | -∞ |
| >0.0 | -∞ | any | -∞ |
decimal32 x = 2; decimal64 y = 3; decimal128 z = 5; assert (fma(x, y, z) == 11);
Returns (x * y) + z, rounding only once according to the current precision and rounding mode