cpp/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 function  evaluates faster (in addition to being more precise) than the expression  for , , and  arguments, respectively. If defined, these macros evaluate to integer. @A@ Additional overloads are provided for all other combinations of arithmetic types.

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 math_errhandling.

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