Freigeben über


fma, fmaf, fmal

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 Angabe in _matherr.

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, fma übernimmt und gibt immer ein double.

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 "Typgenerika" .

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. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

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

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

Siehe auch

Alphabetische Funktionsreferenz
remainder, remainderf, remainderl
remquo, remquof, remquol