fma
, fmaf
, fmal
Moltiplica due valori insieme, aggiunge un terzo valore e quindi arrotonda il risultato, mentre perde solo una piccola quantità di precisione a causa dell'arrotondamento intermedio.
Sintassi
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
Parametri
x
Primo valore da moltiplicare.
y
Secondo valore da moltiplicare.
z
Il valore da aggiungere.
Valore restituito
Restituisce circa (x * y) + z
. Il valore restituito viene quindi arrotondato usando il formato di arrotondamento corrente, anche se in molti casi restituisce risultati arrotondati in modo errato e pertanto il valore può essere inesattiva fino alla metà di un ulp dal valore corretto.
In caso contrario, può restituire uno dei valori seguenti:
Problema | Restituzione |
---|---|
x = INFINITY, y = 0 ox = 0, y = INFINITY |
NaN |
x o y = esatto ± INFINITY, z = INFINITY con il segno opposto |
NaN |
x o y = NaN |
NaN |
not (x = 0, y = indefinito) e z = NaNnot ( x =indefinito, y =0) e z = NaN |
NaN |
Errore di intervallo di overflow | HUGE_VAL ±, ±HUGE_VALF o ±HUGE_VALL |
Errore di intervallo di underflow | valore corretto dopo l'arrotondamento. |
Gli errori vengono segnalati come specificato in _matherr
.
Osservazioni:
Poiché C++ consente l'overload, è possibile chiamare gli overload di fma
che accettano e restituiscono i tipi float
e long double
. In un programma C, a meno che non si usi la <macro tgmath.h> per chiamare questa funzione, fma
accetta sempre e restituisce un oggetto double
.
Se si utilizza la <macro tgmath.h>fma()
, il tipo dell'argomento determina quale versione della funzione è selezionata. Per informazioni dettagliate, vedere La matematica generica dei tipi.
Questa funzione calcola il valore come per la precisione infinita e quindi arrotonda il risultato finale.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Funzione | Intestazione C | Intestazione C++ |
---|---|---|
fma , fmaf , fmal |
<math.h> | <cmath> |
fma macro |
<tgmath.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Vedi anche
Informazioni di riferimento sulle funzioni alfabetiche
remainder
, remainderf
, remainderl
remquo
, remquof
, remquol