2023: ARB a été fusionné en silex. Le référentiel actuel est archivé et ne sera plus mis à jour. Voir
https://github.com/flintlib/flint/
Pour les nouveaux développements!
L'ARB est une bibliothèque C pour l'intervalle de précision arbitraire arithmétique. Il a un support complet pour les nombres réels et complexes. La bibliothèque est en forme de filetage, portable et testée largement. ARB est un logiciel gratuit distribué dans le cadre de la licence GNU Unser General Public License (LGPL), version 2.1 ou ultérieure.
Documentation: http://arblib.org
Mises à jour du développement: http://fredrikj.net/blog/
Auteur: Fredrik Johansson [email protected]
Les rapports de bogues, les demandes de fonctionnalités et autres commentaires sont les bienvenus dans la communication privée, sur le tracker du numéro GitHub, ou sur la liste de diffusion Flint [email protected].
Le programme suivant évalue sin(pi + exp(-10000)) . Étant donné que l'entrée de la fonction sinusoïdale correspond à une racine à à moins de 4343 chiffres, une précision à 4343 chiffres (1427 bits) est nécessaire pour obtenir un résultat précis. Le programme répète l'évaluation à 64 bits, 128 bits, ... la précision, ne s'arrêtant que lorsque le résultat est précis à au moins 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 sortie est:
[+/- 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]
Chaque ligne montre une enceinte rigoureuse de la valeur exacte de l'expression. Le programme montre comment l'utilisateur peut s'appuyer sur le suivi automatique d'erreur ARB pour obtenir une sortie qui est garantie pour être précise - aucune analyse d'erreur ne doit être effectuée par l'utilisateur.
Pour plus d'exemples de programmes, voir: http://arblib.org/examples.html
Outre l'arithmétique de base, l'ARB permet de travailler avec des polynômes univariés, des séries de puissance tronquées et des matrices sur des nombres réels et complexes.
L'algèbre linéaire de base est prise en charge, y compris la multiplication matricielle, le déterminant, l'inverse, la résolution non singulière, la matrice exponentielle et le calcul des valeurs propres et des vecteurs propres.
La prise en charge des polynômes et des séries de puissance est assez étendue, y compris des méthodes de composition, de réversion, des arbres de produits, une évaluation et une interpolation multipoint, une isolation des racines complexes et des fonctions transcendantales des séries de puissance.
D'autres caractéristiques incluent l'isolement racinaire pour les fonctions réelles, l'intégration numérique rigoureuse des fonctions complexes et les transformations de Fourier discrètes (DFT).
L'ARB peut calculer un large éventail de fonctions transcendantales et spéciales, notamment la fonction gamma, les fonctions polygamma, la fonction Riemann Zeta et Hurwitz Zeta, les fonctions L Dirichlet, le polylogarithme, la fonction d'erreur, les fonctions hypergéométriques de Gauss Polynômes, intégrales exponentielles et trigonométriques, fonctions gamma et bêta incomplètes, fonctions jacobi thêta, fonctions modulaires, fonctions elliptiques de Weierstrass, moyenne elliptique complète et incomplète, fonction arithmétique-géométrique, numéro de bernouli, fonction de partition, Barnes g, fonction Lambert W.
ARB utilise une représentation de point médian-radius (balle) de nombres réels. À haute précision, cela permet de faire de l'arithmétique intervalle sans frais généraux significatifs par rapport à l'arithmétique à virgule flottante simple. Diverses optimisations de bas niveau ont également été mises en œuvre pour réduire les frais généraux à des précisions de quelques mots de machine. La plupart des opérations sur les polynômes et les séries de puissance utilisent une multiplication FFT asymptotiquement rapide basée sur le silex. De même, la plupart des opérations sur les grandes matrices profitent de la multiplication de la matrice entière rapide en silex.
Pour l'arithmétique de base, l'ARB doit généralement être aussi rapide que MPFR (http://mpfr.org), bien qu'il puisse être un peu plus lent à faible précision, et environ deux fois plus vite que MPFI (https://perso.ens-lyon.fr/nathalie.revol/software.html).
Les fonctions transcendantales dans l'ARB sont assez bien optimisées et devraient généralement être plus rapides que tout autre logiciel de précision arbitraire actuellement disponible. Le tableau suivant compare le temps en secondes pour évaluer la fonction hypergéométrique Gauss 2F1(1/2, 1/4, 1, z) au nombre complexe z = 5^(1/2) + 7^(1/2)i , à un nombre donné de digits décimaux (arb 2,8 git et mpmath 0,19 sur un 3.90 ghz Intel i5-4300u, mathématique. Intel Xeon X5675).
| Chiffres | Mathématica | 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 dépend de Flint (http://flintlib.org/), soit GMP (http://gmplib.org) ou Mpir (http://mpir.org) et mpfr (http://mpfr.org).
Voir http://arblib.org/setup.html pour des instructions sur la construction et l'installation de l'ARB directement à partir du code source. ARB pourrait également être disponible (ou à venir bientôt) en tant que package pour votre distribution Linux.
Sagemath (http://sagemath.org/) comprend ARB comme package standard et contient une interface Python de haut niveau. Voir la documentation de Sagemath pour Realballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) et complexeballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).
NEMO (https://github.com/nemocas/nemo.jl/) est un package d'algèbre informatique pour le langage de programmation Julia qui comprend une interface Julia de haut niveau à ARB. Le script d'installation NEMO créera une installation locale d'ARB ainsi que d'autres dépendances.
Une interface Python autonome à Flint et ARB est également disponible (https://github.com/fredrik-johansson/python-flint).
Un emballage séparé de fonctions transcendantales à utiliser avec le complex double C99 est disponible (https://github.com/fredrik-johansson/arbcmath).
Les autres emballages tiers comprennent: