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 . x y |
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