fma(), fmaf(), fmal()

Multiply two floating-point numbers and then add a third number

Synopsis:

#include <math.h>

double fma( double x,
            double y,
            double z );

float fmaf( float x,
            float y,
            float z );

long double fmal( long double x,
                  long double y,
                  long double z );

Arguments:

x, y
The numbers that you want to multiply together.
z
The number you want to add to the product.

Library:

libm

Use the -l m option to qcc to link against this library.

Description:

The fma(), fmaf(), and fmal() (“fused multiply-add”) functions calculate (x * y) + z, rounded as one ternary operation. That is, they compute the value to infinite precision and then round the result once, according to the current rounding mode as specified by FLT_ROUNDS.

To check for error situations, use feclearexcept() and fetestexcept():

Returns:

(x * y) + z, rounded as one ternary operation.

Errors:

FE_INVALID
The value of x * y + z is invalid, or the value x * y is invalid and z isn't NaN.
FE_OVERFLOW
The result overflows.

Classification:

ANSI, POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler No
Thread Yes