2023: ARB telah digabungkan menjadi Flint. Repositori saat ini diarsipkan dan tidak akan lagi diperbarui. Melihat
https://github.com/flintlib/flint/
Untuk perkembangan baru!
ARB adalah perpustakaan C untuk aritmatika interval presisi-sewenang-wenang. Ini memiliki dukungan penuh untuk bilangan nyata dan kompleks. Perpustakaan aman, portabel, dan diuji secara luas. ARB adalah perangkat lunak gratis yang didistribusikan di bawah GNU Lesser General Public License (LGPL), versi 2.1 atau lebih baru.
Dokumentasi: http://arblib.org
Pembaruan Pengembangan: http://fredrikj.net/blog/
Penulis: Fredrik Johansson [email protected]
Laporan bug, permintaan fitur dan komentar lainnya diterima dalam komunikasi pribadi, pada pelacak edisi GitHub, atau di milis Flint [email protected].
Program berikut mengevaluasi sin(pi + exp(-10000)) . Karena input ke fungsi sinus cocok dengan root hingga dalam 4343 digit, setidaknya 4343-digit (14427-bit) presisi diperlukan untuk mendapatkan hasil yang akurat. Program ini mengulangi evaluasi pada 64-bit, 128-bit, ... presisi, berhenti hanya ketika hasilnya akurat setidaknya 53 bit.
#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();
}
Outputnya adalah:
[+/- 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]
Setiap baris menunjukkan kandang ketat dari nilai pasti dari ekspresi. Program ini menunjukkan bagaimana pengguna dapat mengandalkan pelacakan terikat kesalahan otomatis ARB untuk mendapatkan output yang dijamin akurat - tidak ada analisis kesalahan yang perlu dilakukan oleh pengguna.
Untuk contoh lebih lanjut program, lihat: http://arblib.org/examples.html
Selain aritmatika dasar, ARB memungkinkan bekerja dengan polinomial univariat, seri daya terpotong, dan matriks pada bilangan nyata dan kompleks.
Aljabar linier dasar didukung, termasuk multiplikasi matriks, penentu, terbalik, pemecahan nonsingular, eksponensial matriks, dan perhitungan nilai eigen dan vektor eigen.
Dukungan untuk polinomial dan seri daya cukup luas, termasuk metode untuk komposisi, pengembalian, pohon produk, evaluasi multipoint dan interpolasi, isolasi akar yang kompleks, dan fungsi transendental dari seri daya.
Fitur lain termasuk isolasi root untuk fungsi nyata, integrasi numerik yang ketat dari fungsi kompleks, dan Discrete Fourier Transforms (DFT).
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 orthogonal polynomials, exponential and trigonometric integrals, incomplete gamma and beta functions, Jacobi theta functions, modular functions, Weierstrass elliptic functions, complete and incomplete elliptic integrals, arithmetic-geometric mean, Bernoulli numbers, partition function, Barnes G-function, Lambert W function.
ARB menggunakan representasi titik-tengah (bola) dari bilangan real. Pada presisi tinggi, ini memungkinkan melakukan aritmatika interval tanpa overhead yang signifikan dibandingkan dengan aritmatika titik mengambang polos. Berbagai optimasi tingkat rendah juga telah diimplementasikan untuk mengurangi overhead pada presisi hanya beberapa kata mesin. Sebagian besar operasi pada polinomial dan serangkaian daya menggunakan perkalian FFT yang cepat asimptotik berdasarkan Flint. Demikian pula, sebagian besar operasi pada matriks besar memanfaatkan multiplikasi matriks integer cepat di Flint.
Untuk aritmatika dasar, ARB umumnya harus ada secepat MPFR (http://mpfr.org), meskipun bisa sedikit lebih lambat pada presisi rendah, dan sekitar dua kali lebih cepat dari mpfi (https://perso.ens-lyon.fr/nathalie.revol/software.html).
Fungsi transendental dalam ARB dioptimalkan dengan cukup baik dan umumnya harus lebih cepat daripada perangkat lunak presisi-presisi lainnya yang saat ini tersedia. Tabel berikut membandingkan waktu dalam detik untuk mengevaluasi fungsi hipergeometrik Gauss 2F1(1/2, 1/4, 1, z) pada bilangan kompleks z = 5^(1/2) + 7^(1/2)i , ke jumlah angka desimal (ARB 2.83, dan MPMATH pada 6.9.a. Xeon x5675).
| Digit | 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 tergantung pada Flint (http://flintlib.org/), baik GMP (http://gmplib.org) atau mpir (http://mpir.org), dan mpfr (http://mpfr.org).
Lihat http://arblib.org/setup.html untuk instruksi tentang membangun dan menginstal ARB langsung dari kode sumber. ARB mungkin juga tersedia (atau segera hadir) sebagai paket untuk distribusi Linux Anda.
Sagemath (http://sagemath.org/) termasuk ARB sebagai paket standar dan berisi antarmuka python tingkat tinggi. Lihat Dokumentasi Sagemath untuk RealBallfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) dan Complexballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).
Nemo (https://github.com/nemocas/nemo.jl/) adalah paket aljabar komputer untuk bahasa pemrograman Julia yang mencakup antarmuka Julia tingkat tinggi ke ARB. Skrip instalasi NEMO akan membuat instalasi ARB lokal bersama dengan dependensi lainnya.
Antarmuka Python mandiri ke Flint dan ARB juga tersedia (https://github.com/fredrik-johansson/python-flint).
Pembungkus terpisah dari fungsi transendental untuk digunakan dengan tipe complex double C99 tersedia (https://github.com/fredrik-johansson/arbcmath).
Pembungkus pihak ketiga lainnya termasuk: