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 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für