fma, fmaffmal

Multipliziert zwei Werte, addiert einen dritten Wert und rundet dann das Ergebnis, während aufgrund der zwischengeschalteten Rundung nur eine geringe Genauigkeit verloren geht.

Syntax

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

float fma(
   float  x,
   float  y,
   float z
); //C++ only

long double fma(
   long double  x,
   long double  y,
   long double z
); //C++ only

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

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

#define fma(X, Y, Z) // Requires C11 or higher

Parameter

x
Der erste zu multiplizierende Wert.

y
Der zweite zu multiplizierende Wert.

z
Der hinzuzufügende Wert.

Rückgabewert

Gibt ungefähr (x * y) + zzurück. Der Rückgabewert wird dann mit dem aktuellen Rundungsformat gerundet, obwohl in vielen Fällen fälschlich gerundete Ergebnisse zurückgegeben werden und damit der Wert von bis zu einer halben Ulp vom richtigen Wert inextakt sein kann.

Andernfalls wird möglicherweise einer der folgenden Werte zurückgeben:

Problem Return
x = INFINITY, y = 0 oder

x = 0, y = INFINITY
NaN
x oder y = genau ± INFINITY, z = INFINITY mit dem entgegengesetzten Zeichen NaN
x oder y = NaN NaN
nicht (x = 0, y= indefinite) und z = NaN

nicht (x=indefinite, y=0) und z = NaN
NaN
Überlaufbereichsfehler HUGE_VAL±, ±HUGE_VALF oder ±HUGE_VALL
Unterlaufbereichsfehler Richtige Wert nach dem Runden

Fehler werden gemäß der Angaben in _matherr gemeldet.

Hinweise

Da C++ das Überladen zulässt, können Sie Überladungen von fma aufrufen, die float und long double-Typen verwenden und zurückgeben. In einem C-Programm, es sei denn, Sie verwenden das Makro <tgmath.h>, um diese Funktion aufzurufen, übernimmt fma und gibt immer ein double zurück.

Wenn Sie das Makro <tgmath.h>fma() verwenden, bestimmt der Typ des Arguments, welche Version der Funktion ausgewählt ist. Ausführliche Informationen finden Sie unter Typgengenerische Mathematik.

Diese Funktion berechnet den Wert mit unendlicher Genauigkeit und rundet das endgültige Ergebnis dann.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

Funktion C-Header C++-Header
fma, fmaffmal <math.h> <cmath>
fma-Makro <tgmath.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Weitere Informationen

Alphabetische Funktionsreferenz
remainder, remainderfremainderl
remquo, remquofremquol