c/numeric/math/fma

@1-3@ Computes as if to infinite precision and rounded only once to fit the result type. @4-6@ If the macro constants, , or are defined, the corresponding function , , or  evaluates faster (in addition to being more precise) than the expression  for , , and  arguments, respectively. If defined, these macros evaluate to integer. @7@ Type-generic macro: If any argument has type, is called. Otherwise, if any argument has integer type or has type, is called. Otherwise, is called.

Return value
If successful, returns the value of as if calculated to infinite precision and rounded once to fit the result type (or, alternatively, calculated as a single ternary floating-point operation).

If a range error due to overflow occurs, huge_val,, or is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

Error handling
Errors are reported as specified in.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
 * If x is zero and y is infinite or if x is infinite and y is zero, and z is not a NaN, then NaN is returned and fe_invalid is raised
 * If x is zero and y is infinite or if x is infinite and y is zero, and z is a NaN, then NaN is returned and fe_invalid may be raised
 * If is an exact infinity and z is an infinity with the opposite sign, NaN is returned and fe_invalid is raised
 * If x or y are NaN, NaN is returned
 * If z is NaN, and aren't 0*Inf or Inf*0, then NaN is returned (without fe_invalid).