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) + z
zurü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 oderx = 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 = NaNnicht ( 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 , fmaf fmal |
<math.h> | <cmath> |
fma -Makro |
<tgmath.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Weitere Informationen
Alphabetische Funktionsreferenz
remainder
, remainderf
remainderl
remquo
, remquof
remquol