fma, fmaf, fmal

Multiplica dos valores juntos, agrega un tercer valor y, a continuación, redondea el resultado, mientras que solo pierde una pequeña cantidad de precisión debido al redondeo intermedio.

Sintaxis

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

Parámetros

x
Primer valor que se va a multiplicar.

y
Segundo valor que se va a multiplicar.

z
El valor que se va a agregar.

Valor devuelto

Devuelve aproximadamente (x * y) + z. A continuación, el valor devuelto se redondea mediante el formato de redondeo actual, aunque en muchos casos devuelve resultados redondeados incorrectamente y, por tanto, el valor puede ser inexacto hasta la mitad de un ulp del valor correcto.

De lo contrario, es posible que devuelva uno de los siguientes valores:

Problema Return
x = INFINITY, y = 0 o

x = 0, y = INFINITY
NaN
x o y = exacto ± INFINITY, z = INFINITY con el signo opuesto NaN
x o y = NaN NaN
no (x = 0, y= indefinido) y z = NaN

no (x= indefinido, y=0) y z = NaN
NaN
Error de intervalo de desbordamiento HUGE_VAL±, ±HUGE_VALF o ±HUGE_VALL
Error de intervalo de subdesbordamiento valor correcto después del redondeo.

Los errores se notifican como se especifica en _matherr.

Comentarios

Como C++ permite las sobrecargas, puede llamar a las sobrecargas de fma que toman y devuelven los tipos float y long double. En un programa de C, a menos que use la <macro tgmath.h> para llamar a esta función, fma siempre toma y devuelve .double

Si usa la macro <tgmath.h>fma(), el tipo del argumento determina qué versión de la función se selecciona. Consulte Matemáticas de tipo genérico para obtener más información.

Esta función calcula el valor como si fuera de precisión infinita y luego redondea el resultado final.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Función Encabezado C Encabezado C++
fma, fmaf, fmal <math.h> <cmath>
fmaMacro <tgmath.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Consulte también

Referencia de función alfabética
remainder, remainderf, remainderl
remquo, remquof, remquol