Articulo de referencia

Biblioteca de matemáticas

En informática , una biblioteca matemática (o biblioteca de matemáticas) es un componente de la biblioteca estándar de un lenguaje de programación que contiene funciones (o subr...

En informática , una biblioteca matemática (o biblioteca de matemáticas) es un componente de la biblioteca estándar de un lenguaje de programación que contiene funciones (o subrutinas ) para las funciones matemáticas más comunes , como la trigonometría y la exponenciación . También puede incluir funcionalidades de manipulación de bits y control relacionadas con números de coma flotante (como en C).

Algunos ejemplos son:

En algunos lenguajes (como Haskell), partes de la biblioteca estándar (incluidas las matemáticas) se importan por defecto. [ 4 ]

Las funcionalidades más avanzadas, como el álgebra lineal, suelen proporcionarse en bibliotecas de terceros, como una biblioteca de álgebra lineal o una biblioteca de matemáticas vectoriales .

Esquema de implementación

Operaciones básicas

En una biblioteca matemática, suele ser útil usar la conversión de tipos para interpretar un número de coma flotante como un entero sin signo del mismo tamaño. Esto permite una inspección más rápida de ciertas propiedades numéricas (positivas o negativas) y la comparación de números. En casos más avanzados, se puede usar la manipulación de bits para modificar un número de una manera específica.

Para una operación más exacta, se puede utilizar un formato doble doble o incluso triple doble . En este caso, un número de alta precisión se expresa como la suma de dos o tres números de punto flotante. [ 5 ]

Funciones trascendentales

Las funciones trascendentales, como las funciones logarítmicas, exponenciales y trigonométricas, constituyen la base de cualquier biblioteca matemática. Estas funciones se implementan generalmente mediante un ajuste polinómico , normalmente un polinomio de Taylor o un polinomio de Chebyshev derivado del algoritmo de Remez (que ofrece la ventaja de una cota de error mejorada), pero los pasos de preprocesamiento son igualmente importantes. [ 5 ]

Trigonometría

La reducción de rango (también reducción de argumentos , división de dominio ) es el primer paso para cualquier función, después de realizar comprobaciones de valores inusuales (infinito y NaN ). El objetivo aquí es reducir el dominio del argumento para el polinomio a procesar, utilizando la simetría y periodicidad de la función (si la hay), estableciendo indicadores para indicar, por ejemplo, si se debe negar el resultado al final (si es necesario). Vale la pena señalar que las funciones periódicas requieren una precisión mayor que la de entrada al reducir, siendo el método prototípico el algoritmo de Payne - Hanek - Corbett. [ 6 ] Después de la reducción de rango, los valores cercanos a cero pueden estar sujetos a una "ruta rápida": por ejemplo, una entrada pequeña x puede devolverse directamente en sin , mientras que 1 | x | puede usarse para cos .

El siguiente paso consiste en evaluar el polinomio mediante el método convencional de Horner . Posteriormente, se puede invertir el signo del resultado según la información obtenida del algoritmo de reducción de rango antes de devolverlo.

Logaritmo y exponencial

El logaritmo en base 2 es relativamente sencillo, ya que la parte entera k ya está en el exponente de punto flotante; por lo tanto, se realiza una reducción de rango preliminar, obteniendo k . La mantisa x (donde log2( x ) está entre -1/2 y 1/2) se compara con una tabla e intervalos para una mayor reducción a un z con log2 conocido y un x/z dentro del rango , junto con los coeficientes polinómicos utilizados para el intervalo en el que se encuentra x/z . El resultado es entonces log( z ) + log( x/z ) + k . [ 7 ] El logaritmo en otras bases sigue un enfoque similar, con las diferencias de que (a) se utiliza una tabla diferente; (b) k debe multiplicarse por log2( nueva base ). [ 7 ]

La exponencial en base 2 es igualmente el "caso base" debido a la estructura de punto flotante. El procedimiento es simplemente una combinación de reducción de rango (generalmente mediante búsqueda) y un polinomio sobre la mantisa restante. [ 7 ] El exponente natural puede implementarse con una tabla separada para mayor precisión, mientras que exp10 puede ser simplemente exp( x × log2(10)) cuando está dentro del rango. [ 7 ] Finalmente, la función de exponente de cualquier base pow() se construye alrededor de exp() y log() en el caso general. [ 7 ]

Véase también

Referencias

  1. "Biblioteca matemática de C" .
  2. "biblioteca matemática de Java" .
  3. "matemáticas preludio de haskell" .
  4. "preludio de haskell" .
  5. ^ Daramy -Loirat, Catherine; Defour, David; Dinechin, Florent de; Gallet, Matthieu; Gast, Nicolás; Lauter, Christoph; Müller, Jean-Michel (diciembre de 2006). CR-LIBM Una biblioteca de funciones elementales correctamente redondeadas en doble precisión (Informe).
  6. Brisebarre, N.; Defour, D.; Kornerup, P.; Muller, J.-M.; Revol, N. (marzo de 2005). "Un nuevo algoritmo de reducción de rango" . IEEE Transactions on Computers . 54 (3): 331– 339. doi : 10.1109/TC.2005.36 .
  7. 1 2 3 4 5 musl v1.2.2 directorio matemático , log1p.c , log2.c , log10.c , exp2.c