2023: ARB wurde in Flint zusammengeführt. Das vorliegende Repository ist archiviert und wird nicht mehr aktualisiert. Sehen
https://github.com/flintlib/flint/
Für neue Entwicklungen!
ARB ist eine C-Bibliothek für die Arithmetik für willkürliche Präzisionen. Es bietet sowohl reale als auch komplexe Zahlen die volle Unterstützung. Die Bibliothek ist threadssicher, tragbar und umfassend getestet. ARB ist eine kostenlose Software, die unter der GNU Lesser General Public Lizenz (LGPL), Version 2.1 oder höher verteilt wird.
Dokumentation: http://arblib.org
Entwicklungsaktualisierungen: http://fredrikj.net/blog/
Autor: Fredrik Johansson [email protected]
Fehlerberichte, Feature-Anfragen und andere Kommentare sind in der privaten Kommunikation, auf dem GitHub-Ausgaber-Tracker oder auf der Flint Mailing-Liste [email protected] willkommen.
Das folgende Programm bewertet sin(pi + exp(-10000)) . Da die Eingabe in die Sinusfunktion mit einem Wurzel mit einem Inneren von 4343 Ziffern übereinstimmt, ist eine Genauigkeit von mindestens 4343-digit (14427-Bit) erforderlich, um ein genaues Ergebnis zu erzielen. Das Programm wiederholt die Bewertung bei 64-Bit, 128-Bit, ... Präzision, nur dann, wenn das Ergebnis auf mindestens 53 Bit genau ist.
#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();
}
Die Ausgabe ist:
[+/- 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]
Jede Zeile zeigt ein strengeres Gehäuse des genauen Wertes des Ausdrucks. Das Programm zeigt, wie sich der Benutzer auf die automatische Fehlerverfolgung von ARB verlassen kann, um eine Ausgabe zu erhalten, die garantiert genau ist. Der Benutzer muss keine Fehleranalyse durchgeführt werden.
Weitere Beispielprogramme finden Sie unter: http://arblib.org/examples.html
Neben der grundlegenden Arithmetik ermöglicht ARB die Arbeit mit univariaten Polynomen, verkürzten Leistungsreihen und Matrizen sowohl über reale als auch komplexe Zahlen.
Grundlegende lineare Algebra werden unterstützt, einschließlich Matrixmultiplikation, Determinant, Inverse, nichtsinguläres Lösen, Matrixexponential und Berechnung von Eigenwerten und Eigenvektoren.
Die Unterstützung für Polynome und Leistungsreihen ist ziemlich umfangreich, einschließlich Methoden zur Zusammensetzung, Umkehrung, Produktbäumen, Multipoint -Bewertung und -interpolation, komplexer Wurzelisolation und transzendentaler Funktionen von Power -Serien.
Weitere Merkmale sind die Wurzelisolierung für reale Funktionen, strenge numerische Integration komplexer Funktionen und diskrete Fourier -Transformationen (DFTs).
Arb can compute a wide range of transcendental and special functions, including the gamma function, polygamma functions, Riemann zeta and Hurwitz zeta function, Dirichlet L-functions, polylogarithm, error function, Gauss hypergeometric function 2F1, confluent hypergeometric functions, Bessel functions, Airy functions, Legendre functions and other orthogonale Polynome, exponentielle und trigonometrische Integrale, unvollständige Gamma- und Beta-Funktionen, Jacobi-Theta-Funktionen, modulare Funktionen, Weierstrass-Elliptikfunktionen, vollständige und unvollständige Elliptikintegrale, Arithmetik-Geometrische Gewinde, Bern-Gewickt, Bern-Gewick, Bern-Gewicks, Bern-Gewick, Wer-Werb-Werfen, Bern-Gewick, Gewinde.
ARB verwendet eine Mittelpunkt-Radius-Darstellung (Ball) realer Zahlen. Bei hoher Präzision ermöglicht dies eine Intervall-Arithmetik ohne signifikanten Overhead im Vergleich zu schwimmender Punktarithmetik. Es wurden auch verschiedene Optimierungen auf niedrigem Niveau implementiert, um den Gemeinkosten bei nur wenigen maschinellen Wörtern zu reduzieren. Die meisten Operationen zu Polynomen und Leistungsreihen verwenden eine asymptotisch schnelle FFT -Multiplikation auf der Grundlage von Flint. In ähnlicher Weise nutzen die meisten Operationen auf großen Matrizen die schnelle ganzzahlige Matrix -Multiplikation in Flint.
Für die grundlegende Arithmetik sollte ARB im Allgemeinen so schnell wie MPFR (http://mpfr.org) sein, obwohl es bei niedriger Präzision etwas langsamer sein kann und doppelt so schnell wie MPFI (https://persso.ens-lyon.fr/nathalie.revol/software.html).
Transzendentale Funktionen in ARB sind recht gut optimiert und sollten im Allgemeinen schneller sein als jede andere derzeit verfügbare beliebige Software für die Präzision. Die folgende Tabelle vergleicht die Zeit in Sekunden zur Bewertung der hypergeometrischen Gauß-Funktion 2F1(1/2, 1/4, 1, z) an der Komplexnummer z = 5^(1/2) + 7^(1/2)i , zu einer gegebenen Anzahl von Dezimalstellen (ARB 2,8-GIT und MPMATH 0.19) auf einem 1,90 Ghz Intel i5-Ziffern auf einem 1,90 GHZ i5-4300U, Mmatmath. Intel Xeon x5675).
| Ziffern | 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 hängt von Flint (http://flintlib.org/) ab, entweder GMP (http://gmplib.org) oder mpir (http://mpir.org) und MPFR (http://mpfr.org).
In http://arblib.org/setup.html finden Sie Anweisungen zum Erstellen und Installieren von ARB direkt aus dem Quellcode. ARB könnte auch als Paket für Ihre Linux -Verteilung verfügbar sein (oder in Kürze kommen).
Sagemath (http://sagemath.org/) enthält ARB als Standardpaket und enthält eine Python-Schnittstelle auf hoher Ebene. Siehe die Sagemath -Dokumentation für Realballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) und Komplexballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).
Nemo (https://github.com/nemocas/nemo.jl/) ist ein Computer-Algebra-Paket für die Julia-Programmiersprache, das eine Julia-Schnittstelle mit hoher Ebene zu ARB enthält. Das NEMO -Installationsskript erstellt zusammen mit anderen Abhängigkeiten eine lokale Installation von ARB.
Eine eigenständige Python-Schnittstelle zu Flint und ARB ist ebenfalls verfügbar (https://github.com/fredrik-johansson/python-floint).
Ein separater Wrapper transzendentaler Funktionen zur Verwendung mit dem complex double C99-Doppeltyp ist verfügbar (https://github.com/fredrik-johansson/arbcmath).
Weitere Wrapper von Drittanbietern sind: