Compatibilidad con cálculos matemáticos y el punto flotante

La biblioteca universal de tiempo de ejecución de C (UCRT) proporciona muchas funciones de biblioteca matemática integrales y de punto flotante, incluidas todas las funciones requeridas por ISO C99. Las funciones de punto flotante se implementan para equilibrar el rendimiento con exactitud. Dado que es posible que producir el resultado redondeado correctamente sea excesivamente costoso, estas funciones están diseñadas para generar con eficacia una buena aproximación al resultado redondeado correctamente. En la mayoría de los casos, el resultado generado está dentro de +/-1 ULP (unidad de menor precisión) del resultado redondeado correctamente, aunque puede haber casos en los que haya una mayor inexactitud.

Para ISO C Standard 11 (C11) y versiones posteriores, el encabezado <tgmath.h>, además de incluir <math.h> y <complex.h>, proporciona macros que invocan una función matemática correspondiente basada en los tipos de los parámetros. Consulte Matemáticas de tipo genérico para obtener más información.

Muchas de las funciones de la biblioteca matemática de punto flotante tienen implementaciones diferentes para distintas arquitecturas de CPU. Por ejemplo, puede que el CRT x86 de 32 bits tenga una implementación distinta que el CRT x64 de 64 bits. Además, algunas de las funciones pueden tener varias implementaciones para una determinada arquitectura de CPU. La implementación más eficaz se selecciona dinámicamente en tiempo de ejecución en función de los conjuntos de instrucciones compatibles con la CPU. Por ejemplo, en el CRT x86 de 32 bits, algunas funciones tienen una implementación x87 y una implementación SSE2. Cuando se ejecuta en una CPU que admite SSE2, se usa la implementación SSE2 más rápida. Cuando se ejecuta en una CPU que no admite SSE2, se usa la implementación x87 más lenta. Dado que es posible que diferentes implementaciones de las funciones de la biblioteca matemática usen distintas instrucciones de CPU y distintos algoritmos para generar sus resultados, puede que las funciones generen diferentes resultados en las CPU. En la mayoría de los casos, los resultados están dentro de +/-1 ULP del resultado redondeado correctamente, pero los resultados reales pueden variar en las CPU.

Las versiones anteriores de 16 bits de Microsoft C/C++ y Microsoft Visual C++ admiten el tipo long double como tipo de datos de punto flotante de precisión de 80 bits. En versiones posteriores de Visual C++, el tipo de datos long double es un tipo de datos de punto flotante de precisión de 64 bits idéntico al tipo double. El compilador trata long double y double como tipos distintos, pero las funciones long double son idénticas a sus double equivalentes. El CRT ofrece versiones de long double de las funciones matemáticas para compatibilidad con código fuente ISO C99, pero tenga en cuenta que la representación binaria puede diferir de otros compiladores.

Rutinas admitidas de cálculos matemáticos y punto flotante

Routine Usar
abs, labs, llabs, _abs64 Calcula el valor absoluto de un tipo de entero
acos, acosf, acosl Calcula el arcocoseno
acosh, acoshf, acoshl Calcula el arcocoseno hiperbólico
asin, asinf, asinl Calcula el arcoseno
asinh, asinhf, asinhl Calcula el arcoseno hiperbólico
atan, atanf, atanl, atan2, atan2f, atan2l Calcula el arco tangente
atanh, atanhf, atanhl Calcula el arco tangente hiperbólico
_atodbl, _atodbl_l Convierte una cadena específica de la configuración regional en un double
atof, _atof_l Convierte una cadena en double
_atoflt, _atoflt_l, _atoldbl, _atoldbl_l Convierte una cadena específica de la configuración regional en un float o long double
cbrt, cbrtf, cbrtl Calcula la raíz cúbica
ceil, ceilf, ceill Calcula el límite superior
_chgsign, _chgsignf, _chgsignl Calcula el inverso aditivo
_clear87, _clearfp Obtiene y borra el registro de estado de punto flotante
_control87, _controlfp, __control87_2 Obtiene y establece la palabra de control de punto flotante
_controlfp_s Versión segura de _controlfp
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl Devuelve un valor que tiene la magnitud de un argumento y el signo de otro
cos, cosf, cosl Calcula el seno
cosh, coshf, coshl Calcula el seno hiperbólico
div, ldiv, lldiv Calcula el cociente y el resto de dos valores enteros
_ecvt, ecvt Convierte double en una cadena
_ecvt_s Versión segura de _ecvt
erf, erff, erfl Calcula la función de error
erfc, erfcf, erfcl Calcula la función de error complementaria
exp, expf, expl Calcula el valor exponencial de ex
exp2, exp2f, exp2l Calcula el valor exponencial de 2x
expm1, expm1f, expm1l Calcula ex-1
fabs, fabsf, fabsl Calcula el valor absoluto de un tipo de punto flotante
_fcvt, fcvt Convertir un número de punto flotante en una cadena
_fcvt_s Versión segura de _fcvt
fdim, fdimf, fdiml Determina la diferencia positiva entre dos valores
feclearexcept Borra las excepciones de punto flotante especificadas
fegetenv Almacena el entorno actual de punto flotante
fegetexceptflag Obtiene el estado de las excepciones de punto flotante especificadas
fegetround Obtiene el modo de redondeo de punto flotante
feholdexcept Establece el modo sin interrupción de excepción de punto flotante
feraiseexcept Genera las excepciones de punto flotante especificadas
fesetenv Establece el entorno actual de punto flotante
fesetexceptflag Establece las marcas de estado de punto flotante especificadas
fesetround Establece el modo de redondeo de punto flotante especificado
fetestexcept Determina las marcas de estado de excepción de punto flotante que se establecen
feupdateenv Restaura un entorno de punto flotante y después genera excepciones anteriores
floor, floorf, floorl Calcula el límite inferior
fma, fmaf, fmal Calcula una multiplicación y suma fusionadas
fmax, fmaxf, fmaxl Calcula el máximo de los argumentos
fmin, fminf, fminl Calcula el mínimo de los argumentos
fmod, fmodf, fmodl Calcula el resto de punto flotante
_fpclass, _fpclassf Devuelve la clasificación de un valor de punto flotante
fpclassify Devuelve la clasificación de un valor de punto flotante
_fpieee_flt Establece un controlador de excepciones de punto flotante
_fpreset Restablece el entorno de punto flotante
frexp, frexpf, frexpl Obtiene la mantisa y el exponente de un número de punto flotante
_gcvt, gcvt Convertir un número de punto flotante en una cadena
_gcvt_s Versión segura de _gcvt
_get_FMA3_enable, _set_FMA3_enable Obtiene o establece una marca para el uso de instrucciones de FMA3 en x64
hypot, hypotf, hypotl, _hypot, _hypotf, _hypotl Calcula la hipotenusa
ilogb, ilogbf, ilogbl Calcula el exponente en base 2 del entero
imaxabs Calcula el valor absoluto de un tipo de entero
imaxdiv Calcula el cociente y el resto de dos valores enteros
isfinite, _finite, _finitef Determina si un valor es finito
isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered Compara el orden de dos valores de punto flotante
isinf Determina si un valor de punto flotante es infinito
isnan, _isnan, _isnanf Prueba un valor de punto flotante para NaN
isnormal Prueba si un valor de punto flotante es finito y no es subnormal
_j0, _j1, _jn Calcula la función Bessel
ldexp, ldexpf, ldexpl Calcula x*2n
lgamma, lgammaf, lgammal Calcula el logaritmo natural del valor absoluto de la función gamma
llrint, llrintf, llrintl Redondea un valor de punto flotante al valor long long más cercano
llround, llroundf, llroundl Redondea un valor de punto flotante al valor long long más cercano
log, logf, logl, log10, log10f, log10l Calcula el logaritmo natural o en base 10
log1p, log1pf, log1pl Calcula el logaritmo natural de 1+x
log2, log2f, log2l Calcula el logaritmo en base 2
logb, logbf, logbl, _logb, _logbf Devuelve el exponente de un valor de punto flotante
lrint, lrintf, lrintl Redondea un valor de punto flotante al valor long más cercano
_lrotl, _lrotr Gira un valor entero a la izquierda o derecha
lround, lroundf, lroundl Redondea un valor de punto flotante al valor long más cercano
_matherr Controlador de errores matemáticos predeterminado
__max Macro que devuelve el mayor de dos valores
__min Macro que devuelve el menor de dos valores
modf, modff, modfl Divide un valor de punto flotante en partes fraccionarias y enteras
nan, nanf, nanl Devuelve un valor NaN reservado
nearbyint, nearbyintf, nearbyintl Devuelve el valor redondeado
nextafter, nextafterf, nextafterl, _nextafter, _nextafterf Devuelve el siguiente valor de punto flotante que se pueda representar
nexttoward, nexttowardf, nexttowardl Devuelve el siguiente valor de punto flotante que se pueda representar
pow, powf, powl Devuelve el valor de . xy
remainder, remainderf, remainderl Calcula el resto del cociente de dos valores de punto flotante
remquo, remquof, remquol Calcula el resto de dos valores enteros
rint, rintf, rintl Redondea un valor de punto flotante
_rotl, _rotl64, _rotr, _rotr64 Gira bits en tipos enteros
round, roundf, roundl Redondea un valor de punto flotante
_scalb, _scalbf Escala el argumento por una potencia de 2
scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl Multiplica un número de punto flotante por una potencia integral de FLT_RADIX
_set_controlfp Establece la palabra de control de punto flotante
_set_SSE2_enable Habilita o deshabilita las instrucciones de SSE2
signbit Prueba el bit de signo de un valor de punto flotante
sin, sinf, sinl Calcula el seno
sinh, sinhf, sinhl Calcula el seno hiperbólico
sqrt, sqrtf, sqrtl Calcula la raíz cuadrada
_status87, _statusfp, _statusfp2 Obtiene la palabra de estado de punto flotante
strtof, _strtof_l Convierte una cadena en float
strtold, _strtold_l Convierte una cadena en long double
tan, tanf, tanl Calcula la tangente
tanh, tanhf, tanhl Calcula la tangente hiperbólica
tgamma, tgammaf, tgammal Calcula la función gamma
trunc, truncf, truncl Trunca la parte fraccionaria
_wtof, _wtof_l Convierte una cadena de caracteres anchos en un double
_y0, _y1, _yn Calcula la función Bessel

Consulte también

Rutinas en tiempo de ejecución Universal C por categoría
Tipos primitivos de punto flotante