C funciones matemáticas - C mathematical functions

Las operaciones matemáticas C son un grupo de funciones en la biblioteca estándar del lenguaje de programación C que implementa funciones matemáticas básicas. Todas las funciones utilizan números de punto flotante de una forma u otra. Los diferentes estándares C proporcionan conjuntos de funciones diferentes, aunque compatibles con versiones anteriores. La mayoría de estas funciones también están disponibles en la biblioteca estándar de C ++ , aunque en diferentes encabezados (los encabezados C también se incluyen, pero solo como una característica de compatibilidad obsoleta).

Resumen de funciones

La mayoría de las funciones matemáticas están definidas en <math.h>( <cmath>encabezado en C ++). Las funciones que operan sobre números enteros, tales como abs, labs, div, y ldiv, en cambio se definen en la <stdlib.h>cabecera ( <cstdlib>cabecera en C ++).

Cualquier función que opere en ángulos usa radianes como unidad de ángulo.

No todas estas funciones están disponibles en la versión C89 del estándar. Para aquellos que lo son, las funciones aceptan solo tipo doublepara los argumentos de punto flotante, lo que lleva a costosas conversiones de tipo en el código que de otra manera usaba floatvalores de precisión simple . En C99, esta deficiencia se solucionó mediante la introducción de nuevos conjuntos de funciones que funcionan floaty long doubleargumentos. Estas funciones se identifican con sufijos fy lrespectivamente.

Función Descripción
abs
labs
llabs
calcula el valor absoluto de un valor entero
fabs calcula el valor absoluto de un valor de punto flotante
div
ldiv
lldiv
calcula el cociente y el resto de la división entera
fmod resto de la operación de división de punto flotante
remainder resto firmado de la operación de división
remquo resto con signo, así como los tres últimos bits de la operación de división
fma operación fusionada de suma múltiple
fmax mayor de dos valores de coma flotante
fmin menor de dos valores de coma flotante
fdim diferencia positiva de dos valores de coma flotante
nan
nanf
nanl
devuelve un NaN (no un número)
exponenciales
funciones
exp devuelve e elevado a la potencia dada
exp2 devuelve 2 elevado a la potencia dada
expm1 devuelve e elevado a la potencia dada, menos uno
log calcula el logaritmo natural (en base e)
log2 calcula el logaritmo binario (en base 2)
log10 calcula el logaritmo común (en base 10)
log1p calcula el logaritmo natural (en base e) de 1 más el número dado
ilogb extrae exponente del número
logb extrae exponente del número

Funciones de potencia
sqrt calcula la raíz cuadrada
cbrt calcula la raíz cúbica
hypot calcula la raíz cuadrada de la suma de los cuadrados de dos números dados
pow eleva un número a la potencia dada

Funciones trigonométricas
sin calcula el seno
cos calcula el coseno
tan calcula la tangente
asin calcula el seno del arco
acos calcula el coseno del arco
atan calcula el arco tangente
atan2 calcula el arco tangente, usando signos para determinar cuadrantes

Funciones hiperbólicas
sinh calcula el seno hiperbólico
cosh calcula el coseno hiperbólico
tanh calcula la tangente hiperbólica
asinh calcula el seno del arco hiperbólico
acosh calcula el coseno de arco hiperbólico
atanh calcula el arco tangente hiperbólico
Funciones de error y
gamma
erf calcula la función de error
erfc calcula la función de error complementaria
lgamma calcula el logaritmo natural del valor absoluto de la función gamma
tgamma calcula la función gamma
Operaciones de punto flotante
entero más cercano


ceil devuelve el número entero más cercano no menor que el valor dado
floor devuelve el número entero más cercano no mayor que el valor dado
trunc devuelve el número entero más cercano no mayor en magnitud que el valor dado
round
lround
llround
devuelve el número entero más cercano, redondeando desde cero en casos intermedios
nearbyint devuelve el entero más cercano usando el modo de redondeo actual
rint
lrint
llrint
devuelve el entero más cercano usando el modo de redondeo actual con excepción si el resultado es diferente
Flotante
de punto
de manipulación de
funciones
frexp descompone un número en un significado y una potencia de 2
ldexp multiplica un número por 2 elevado a una potencia
modf descompone un número en partes enteras y fraccionarias
scalbn
scalbln
multiplica un número por FLT_RADIX elevado a una potencia
nextafter
nexttoward
devuelve el siguiente valor de punto flotante representable hacia el valor dado
copysign copia el signo de un valor de punto flotante
Clasificación fpclassify categoriza el valor de punto flotante dado
isfinite comprueba si el argumento tiene un valor finito
isinf comprueba si el argumento es infinito
isnan comprueba si el argumento es NaN
isnormal comprueba si el argumento es normal
signbit comprueba si el signo del argumento es negativo

Entorno de punto flotante

C99 agrega varias funciones y tipos para un control detallado del entorno de punto flotante. Estas funciones se pueden usar para controlar una variedad de configuraciones que afectan los cálculos de punto flotante, por ejemplo, el modo de redondeo, en qué condiciones ocurren excepciones, cuando los números se vacían a cero, etc. Se definen las funciones y tipos del entorno de punto flotante en el <fenv.h>encabezado ( <cfenv>en C ++ ).

Función Descripción
feclearexcept borra excepciones ( C99 )
fegetenv almacena el entorno de punto flotante actual ( C99 )
fegetexceptflag almacena banderas de estado actual ( C99 )
fegetround recupera la dirección de redondeo actual ( C99 )
feholdexcept guarda el entorno de punto flotante actual y borra todas las excepciones ( C99 )
feraiseexcept genera una excepción de punto flotante ( C99 )
fesetenv establece el entorno de punto flotante actual ( C99 )
fesetexceptflag establece banderas de estado actual ( C99 )
fesetround establece la dirección de redondeo actual ( C99 )
fetestexcept comprueba si se han planteado determinadas excepciones ( C99 )
feupdateenv restaura el entorno de punto flotante, pero mantiene las excepciones actuales ( C99 )

Números complejos

C99 agrega una nueva _Complexpalabra clave (y complexuna macro de conveniencia) que brinda soporte para números complejos. Cualquier tipo de coma flotante se puede modificar con complex, y luego se define como un par de números de coma flotante. Tenga en cuenta que C99 y C ++ no implementan números complejos de una manera compatible con el código; este último, en cambio, proporciona la clase . std::complex

Todas las operaciones con números complejos se definen en el <complex.h>encabezado. Al igual que con las funciones con valores reales, un sufijo fo ldenota la variante float complexo long double complexde la función.

Función Descripción

Operaciones basicas
cabs calcula el valor absoluto ( C99 )
carg calcula el argumento de un número complejo ( C99 )
cimag calcula la parte imaginaria de un número complejo ( C99 )
creal calcula la parte real de un número complejo ( C99 )
conj calcula conjugado complejo ( C99 )
cproj calcula la proyección compleja en la esfera de Riemann ( C99 )

Operaciones de exponenciación
cexp calcula exponencial complejo ( C99 )
clog calcula logaritmos complejos ( C99 )
csqrt calcula la raíz cuadrada compleja ( C99 )
cpow calcula potencia compleja ( C99 )

Operaciones trigonométricas
csin calcula el seno complejo ( C99 )
ccos calcula el coseno complejo ( C99 )
ctan calcula la tangente compleja ( C99 )
casin calcula el seno de arco complejo ( C99 )
cacos calcula el coseno de arco complejo ( C99 )
catan calcula el arco tangente complejo ( C99 )

Operaciones hiperbólicas
csinh calcula el seno hiperbólico complejo ( C99 )
ccosh calcula el coseno hiperbólico complejo ( C99 )
ctanh calcula la tangente hiperbólica compleja ( C99 )
casinh calcula el seno de arco hiperbólico complejo ( C99 )
cacosh calcula el coseno de arco hiperbólico complejo ( C99 )
catanh calcula el arco tangente hiperbólico complejo ( C99 )

Algunas funciones más complejas están "reservadas para uso futuro en C99". Las implementaciones son proporcionadas por proyectos de código abierto que no forman parte de la biblioteca estándar.

Función Descripción
Funciones de error cerf calcula la función de error compleja ( C99 )
cerfc calcula la función de error complementario complejo ( C99 )

Funciones de tipo genérico

El encabezado <tgmath.h>define una macro genérica de tipo para cada función matemática definida en <math.h>y <complex.h>. Esto agrega un soporte limitado para la sobrecarga de funciones de las funciones matemáticas: el mismo nombre de función se puede usar con diferentes tipos de parámetros; la función real se seleccionará en el momento de la compilación de acuerdo con los tipos de parámetros.

Cada macro de tipo genérico que corresponde a una función que se define para ambos números reales y complejos encapsula un total de 6 funciones diferentes: float, doubley long double, y sus complexvariantes. Las macros de tipo genérico que corresponden a una función que se define únicamente para los números reales encapsula un total de 3 funciones diferentes: float, doubley long doublevariantes de la función.

El lenguaje C ++ incluye soporte nativo para la sobrecarga de funciones y, por lo tanto, no proporciona el <tgmath.h>encabezado ni siquiera como característica de compatibilidad.

Generación de números aleatorios

El encabezado <stdlib.h>( <cstdlib>en C ++) define varias funciones que se pueden utilizar para la generación de números estadísticamente aleatorios.

Función Descripción
rand genera un número pseudoaleatorio entre 0 e RAND_MAXinclusive.
srand inicializa un generador de números pseudoaleatorios
arc4random genera un número pseudoaleatorio entre 0 y UINT32_MAX, generalmente usando un algoritmo mejor querand
arc4random_uniform genera un número pseudoaleatorio entre 0 y un valor máximo.
arc4random_buf llenar un búfer con un flujo de bits pseudoaleatorio.
arc4random_stir inicializa un generador de números pseudoaleatorios .

La arc4randomfamilia de funciones de números aleatorios no está definida en el estándar POSIX, pero se encuentra en algunas libcimplementaciones comunes . Solía ​​referirse al generador de flujo de claves de una versión filtrada del cifrado RC4 (de ahí " un RC4 lleno "), pero se han implementado diferentes algoritmos, generalmente de otros cifrados como ChaCha20 , desde que se usa el mismo nombre.

La calidad de la aleatoriedad randsuele ser demasiado débil para siquiera considerarse estadísticamente aleatoria, y requiere una siembra explícita. Por lo general, se recomienda usarlo en arc4randomlugar de randcuando sea posible. Algunas bibliotecas de C implementan el randuso arc4random_uniforminterno.

Implementaciones

En sistemas POSIX como Linux y BSD , las funciones matemáticas (como se declaran en <math.h>) se agrupan por separado en la biblioteca matemática . Por lo tanto, si se utiliza alguna de esas funciones, el vinculador debe recibir la directiva . Hay varias implementaciones, que incluyen: libm-lmlibm

Las implementaciones no necesariamente bajo el nombre de libmincluyen:

Ver también

Referencias

enlaces externos