Condividi tramite


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 o

x = 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 = NaN

not (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