2023: O ARB foi fundido em Flint. O presente repositório está arquivado e não será mais atualizado. Ver
https://github.com/flintlib/flint/
Para novos desenvolvimentos!
O ARB é uma biblioteca C para aritmética do intervalo de precisão arbitrária. Tem suporte total para números reais e complexos. A biblioteca é segura, portátil e extensivamente testada. O ARB é um software livre distribuído sob a licença pública geral da GNU (LGPL), versão 2.1 ou posterior.
Documentação: http://arblib.org
Atualizações de desenvolvimento: http://fredrikj.net/blog/
Autor: Fredrik Johansson [email protected]
Relatórios de bug, solicitações de recursos e outros comentários são bem-vindos em comunicação privada, no rastreador de edições do github ou na lista de discussão Flint [email protected].
O programa a seguir avalia sin(pi + exp(-10000)) . Como a entrada para a função seno corresponde a uma raiz a 4343 dígitos, é necessária pelo menos 4343 dígitos (14427 bits) para obter um resultado preciso. O programa repete a avaliação em 64 bits, 128 bits, ... precisão, parando apenas quando o resultado é preciso para pelo 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();
}
A saída é:
[+/- 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 linha mostra um gabinete rigoroso do valor exato da expressão. O programa demonstra como o usuário pode confiar no rastreamento automático de erro automático da ARB para obter uma saída que é garantida como precisa - nenhuma análise de erro precisa ser feita pelo usuário.
Para mais programas de exemplo, consulte: http://arblib.org/examples.html
Além da aritmética básica, o ARB permite trabalhar com polinômios univariados, séries de potência truncada e matrizes em números reais e complexos.
A álgebra linear básica é suportada, incluindo multiplicação de matriz, resolução determinante, inversa, não singular, exponencial da matriz e computação de autovalores e autovetores.
O suporte a séries de polinômios e potência é bastante extenso, incluindo métodos de composição, reversão, árvores de produtos, avaliação e interpolação multiponto, isolamento de raiz complexo e funções transcendentais de poder de energia.
Outros recursos incluem isolamento de raiz para funções reais, integração numérica rigorosa de funções complexas e transformadas discretas de Fourier (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 Polinômios ortogonais, integrais exponenciais e trigonométricos, funções gama e beta incompletas, funções jacobi teta, funções modulares, funções elípticas de Weiersrass, integrais elípticos completos, parto-geométricos, números berníticos, parto-geométricos, números berníticos, parto-geométricos, números berníssicos, parto-geométricos, berníssimos.
O ARB usa uma representação de Radio Médio (Ball) de números reais. Em alta precisão, isso permite fazer aritmética intervalada sem sobrecarga significativa em comparação com a aritmética de ponto flutuante simples. Várias otimizações de baixo nível também foram implementadas para reduzir a sobrecarga em precisões de apenas algumas palavras da máquina. A maioria das operações sobre polinômios e séries de energia usa multiplicação de FFT assintoticamente rápida com base no FLINT. Da mesma forma, a maioria das operações em matrizes grandes aproveita a multiplicação de matriz inteira rápida em Flint.
Para a aritmética básica, o ARB geralmente deve estar tão rápido quanto o MPFR (http://mpfr.org), embora possa ser um pouco mais lento a baixa precisão e duas vezes mais rápido que o MPFI (https://perso.ens-lyon.fr/nathalie.revol/software.html).
As funções transcendentais no ARB são muito bem otimizadas e geralmente devem ser mais rápidas do que qualquer outro software de precisão arbitrária atualmente disponível. A tabela a seguir compara o tempo em segundos para avaliar a função hipergeométrica de Gauss 2F1(1/2, 1/4, 1, z) no número complexo z = 5^(1/2) + 7^(1/2)i , para um dado dígito decimal (arb 2.8-git e mpmath 0,19 em um 1.9 GHZ INT. 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 |
O ARB depende de Flint (http://flintlib.org/), GMP (http://gmplib.org) ou mpir (http://mpir.org) e mpfr (http://mpfr.org).
Consulte http://arblib.org/setup.html para obter instruções sobre como criar e instalar o ARB diretamente a partir do código -fonte. O ARB também pode estar disponível (ou em breve) como um pacote para sua distribuição Linux.
Sagemath (http://sagemath.org/) inclui o ARB como um pacote padrão e contém uma interface Python de alto nível. Veja a documentação de Sagemath para Realballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) e Complexballfield (http://doc.sageMath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).
Nemo (https://github.com/nemocas/nemo.jl/) é um pacote de álgebra de computador para a linguagem de programação Julia, que inclui uma interface Julia de alto nível para o ARB. O script de instalação do NEMO criará uma instalação local do ARB junto com outras dependências.
Uma interface python independente para Flint e ARB também está disponível (https://github.com/fredrik-johansson/python-flint).
Um invólucro separado de funções transcendentais para uso com o tipo complex double C99 está disponível (https://github.com/fredrik-johansson/arbcmath).
Outros invólucros de terceiros incluem: