Partage via


fma, fmaf, fmal

Multiplie deux valeurs ensemble, ajoute une troisième valeur, puis arrondit le résultat, tout en ne perdant qu’une petite quantité de précision en raison de l’arrondi intermédiaire.

Syntaxe

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

Paramètres

x
Première valeur à multiplier.

y
Seconde valeur à multiplier.

z
Valeur à ajouter.

Valeur retournée

Retourne approximativement (x * y) + z. La valeur de retour est ensuite arrondie à l’aide du format d’arrondi actuel, bien que dans de nombreux cas, elle retourne des résultats arrondis de manière incorrecte et, par conséquent, la valeur peut être inexacte jusqu’à la moitié d’ulp de la valeur correcte.

Sinon, peut retourner l’une des valeurs suivantes :

Problème Renvoie
x = INFINITY, y = 0 ou

x = 0, y = INFINITY
NaN
x or y = exact ± INFINITY, z = INFINITY avec le signe opposé NaN
x ou y = NaN NaN
Pas (x = 0, y= indéfini) et z = NaN

Pas (x = indéfini, y = 0) et z = NaN
NaN
Erreur de plage avec dépassement HUGE_VAL±, ±HUGE_VALF ou ±HUGE_VALL
Erreur de plage avec soupassement valeur correcte, après arrondi.

Les erreurs sont signalées comme spécifié dans _matherr.

Notes

C++ autorisant la surcharge, vous pouvez appeler des surcharges de fma qui acceptent et retournent des types float et long double. Dans un programme C, sauf si vous utilisez la <macro tgmath.h> pour appeler cette fonction, fma prend toujours et retourne un double.

Si vous utilisez la <macro tgmath.h>fma() , le type de l’argument détermine la version de la fonction sélectionnée. Pour plus d’informations, consultez les mathématiques génériques de type.

Cette fonction calcule la valeur avec une précision infinie, puis arrondit le résultat final.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Fonction En-tête C En-tête C++
fma, fmaf, fmal <math.h> <cmath>
Macro fma <tgmath.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Voir aussi

Informations de référence sur les fonctions alphabétiques
remainder, remainderf, remainderl
remquo, remquof, remquol