2023: ARB se ha fusionado en Flint. El repositorio actual está archivado y ya no se actualizará. Ver
https://github.com/flintlib/flint/
¡Para nuevos desarrollos!
ARB es una biblioteca C para la aritmética de intervalo de precisión arbitraria. Tiene un soporte total para números reales y complejos. La biblioteca es segura de hilo, portátil y ampliamente probada. ARB es un software gratuito distribuido bajo la Licencia Pública General General de GNU (LGPL), Versión 2.1 o posterior.
Documentación: http://arblib.org
Actualizaciones de desarrollo: http://fredrikj.net/blog/
Autor: Fredrik Johansson [email protected]
Los informes de errores, las solicitudes de funciones y otros comentarios son bienvenidos en la comunicación privada, en el rastreador de problemas de GitHub, o en la lista de correo de Flint [email protected].
El siguiente programa evalúa sin(pi + exp(-10000)) . Dado que la entrada a la función SINE coincide con una raíz dentro de 4343 dígitos, se necesita una precisión de al menos 4343 dígitos (14427 bits) para obtener un resultado preciso. El programa repite la evaluación a 64 bits, 128 bits, ... precisión, deteniéndose solo cuando el resultado es preciso a al menos 53 bits.
#include "arb.h"
int main()
{
slong prec;
arb_t x, y;
arb_init(x); arb_init(y);
for (prec = 64; ; prec *= 2)
{
arb_const_pi(x, prec);
arb_set_si(y, -10000);
arb_exp(y, y, prec);
arb_add(x, x, y, prec);
arb_sin(y, x, prec);
arb_printn(y, 15, 0); printf("n");
if (arb_rel_accuracy_bits(y) >= 53)
break;
}
arb_clear(x); arb_clear(y);
flint_cleanup();
}
La salida es:
[+/- 6.01e-19]
[+/- 2.55e-38]
[+/- 8.01e-77]
[+/- 8.64e-154]
[+/- 5.37e-308]
[+/- 3.63e-616]
[+/- 1.07e-1232]
[+/- 9.27e-2466]
[-1.13548386531474e-4343 +/- 3.91e-4358]
Cada línea muestra un riguroso recinto del valor exacto de la expresión. El programa demuestra cómo el usuario puede confiar en el seguimiento de errores automáticos de ARB para obtener una salida que se garantice que sea precisa; el usuario no debe realizar un análisis de errores.
Para más programas de ejemplo, consulte: http://arblib.org/examples.html
Además de la aritmética básica, ARB permite trabajar con polinomios univariados, series de potencia truncada y matrices sobre números reales y complejos.
Se admite el álgebra lineal básica, incluida la multiplicación de matriz, determinante, inversa, resolución no singular, exponencial de la matriz y cálculo de valores propios y vectores propios.
El soporte para polinomios y series de potencia es bastante extenso, incluidos métodos para la composición, reversión, árboles de productos, evaluación y interpolación multipunto, aislamiento de raíces complejas y funciones trascendentales de series de potencia.
Otras características incluyen el aislamiento de la raíz para funciones reales, la rigurosa integración numérica de funciones complejas y transformaciones discretas de Fourier (DFT).
El ARB puede calcular una amplia gama de funciones trascendentales y especiales, incluida la función gamma, las funciones de poligamma, la función de riemann zeta y hurwitz zeta, las funciones L dirichlet, el polilogaritmo, la función de error, la función hipergeometría de Gauss 2F1, los conclusiones confluentes y las funciones higuventicráticas, las funciones bessel bessel, las funciones fúnebres lúgubres y las funciones fúnebres legales y las funciones fúnebres legales y las funciones fúnebres legales y las funciones fúnebres legales y las funciones fúnebres legales y las funciones fúnebres legales y las funciones fúnebres legentales, y las funciones fúnebres fúnebres legales, y las funciones fúnebres legales, y las funciones fúnebres. Polinomios ortogonales, integrales exponenciales y trigonométricas, funciones gamma y beta incompletas, funciones jacobi theta, funciones modulares, funciones elípticas de Weierstrass, integrales elípticos completos e incompletos, funciones de aritmética-geometría, números de bernoulli, función de partición, bares g-funes g-funes.
ARB utiliza una representación de punto medio (Ball) de números reales. A alta precisión, esto permite hacer aritmética de intervalo sin una sobrecarga significativa en comparación con la aritmética de punto flotante liso. También se han implementado varias optimizaciones de bajo nivel para reducir la sobrecarga en precisiones de solo unas pocas palabras de máquina. La mayoría de las operaciones en polinomios y series de potencia utilizan multiplicación FFT asintóticamente rápida basada en Flint. Del mismo modo, la mayoría de las operaciones en matrices grandes aprovechan la multiplicación de matriz entera rápida en Flint.
Para la aritmética básica, el ARB generalmente debe ser tan rápido como MPFR (http://mpfr.org), aunque puede ser un poco más lento a baja precisión, y alrededor del doble de rápido que MPFI (https://perso.ens-lyon.fr/nathalie.revol/software.html).
Las funciones trascendentales en ARB están bastante bien optimizadas y generalmente deberían ser más rápidas que cualquier otro software de precisión arbitraria disponible actualmente. La siguiente tabla compara el tiempo en segundos para evaluar la función hipergeométrica de Gauss 2F1(1/2, 1/4, 1, z) en el número complejo z = 5^(1/2) + 7^(1/2)i , a un número dado de dígitos dígados (arb 2.8-git y mpmath 0.19 en un 1.90 ghz intel I5-4300u, matemáticas decimáticas 9.0 en un 3.19 en un 1.90 ghz intel I5-4300u, matemáticas decimáticas 9.0 en un 3.19 en un 1.90 ghz intel I5-4300u, matemáticas decimáticas 9.0 en un 3.19 en un 1.90 ghz intel I5-4300u, matemáticas decimáticas 9.0. Intel Xeon X5675).
| Dígitos | Mathematica | mpmath | Arb |
|---|---|---|---|
| 10 | 0.00066 | 0.00065 | 0.000071 |
| 100 | 0.0039 | 0.0012 | 0.00048 |
| 1000 | 0.23 | 1.2 | 0.0093 |
| 10000 | 42.6 | 84 | 0.56 |
ARB depende de Flint (http://flintlib.org/), GMP (http://gmplib.org) o mpir (http://mpir.org) y MPFR (http://mpfr.org).
Consulte http://arblib.org/setup.html para obtener instrucciones sobre la construcción e instalación de ARB directamente desde el código fuente. ARB también podría estar disponible (o próximamente) como un paquete para su distribución de Linux.
Sagemath (http://sagemath.org/) incluye ARB como un paquete estándar y contiene una interfaz Python de alto nivel. Vea la documentación de Sagemath para Realballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) y Complexballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).
Nemo (https://github.com/nemocas/nemo.jl/) es un paquete de álgebra informática para el lenguaje de programación de Julia que incluye una interfaz Julia de alto nivel para ARB. El script de instalación de NEMO creará una instalación local de ARB junto con otras dependencias.
También está disponible una interfaz independiente de Python para Flint y ARB (https://github.com/fredrik-johansson/python-flint).
Un envoltorio separado de funciones trascendentales para usar con el tipo complex double C99 está disponible (https://github.com/fredrik-johansson/arbcmath).
Otros envoltorios de terceros incluyen: