2023年:ARB已合併為Flint。當前的存儲庫已存檔,將不再更新。看
https://github.com/flintlib/flint/
對於新的發展!
ARB是用於任意推測間隔算術的C庫。它對真實數字和復數都有全部支持。該庫是線程安全的,便攜式的,並且經過廣泛的測試。 ARB是根據GNU較少的通用公共許可證(LGPL)(版本2.1或更高版本)分發的免費軟件。
文檔:http://arblib.org
開發更新:http://fredrikj.net/blog/
作者:fredrik johansson [email protected]
在私人通信,GitHub Disears Tracker或Flint郵件列表[email protected]上,歡迎使用錯誤報告,功能請求和其他註釋。
以下程序評估sin(pi + exp(-10000)) 。由於對正弦函數的輸入與4343位數之內的根部匹配,因此需要至少4343位數字(14427位)精度才能獲得準確的結果。該程序在64位,128位,...精度下重複評估,僅在結果準確至至少53位時停止。
#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();
}
輸出是:
[+/- 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]
每行顯示了表達式確切值的嚴格圍欄。該程序演示了用戶如何依靠ARB的自動錯誤綁定跟踪來獲得確保准確的輸出 - 用戶不需要進行錯誤分析。
有關更多示例程序,請參見:http://arblib.org/examples.html
除基本算術外,ARB還允許使用單變量多項式,截短的功率序列以及在真實和復數上的矩陣。
支持基本的線性代數,包括矩陣乘法,決定因素,逆,非溶液求解,矩陣指數以及特徵值和特徵向量的計算。
對多項式和功率序列的支持非常廣泛,包括用於組成,恢復,產品樹,多點評估和插值,複雜的根部隔離以及功率序列的先驗功能的方法。
其他功能包括用於實際功能的根隔離,複雜函數的嚴格數值集成以及離散的傅立葉變換(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,指數和三角集積分,不完整的伽馬和β函數,雅各比theta函數,模塊化函數,weierstrass橢圓函數,完整和不完整的橢圓形積分,算術 - 幾何平均值,算術 - 伯努爾(Bernoulli)數量,伯努爾(Bernoulli)數量,分區功能,Barnes Gunction,Lambert function,Lambert W功能。
ARB使用實數的中點 - 拉迪烏斯(球)表示。與普通的浮點算術相比,這可以高精度地進行間隔算術而沒有明顯的開銷。還實施了各種低級優化,以減少幾個機器單詞的精確度。多項式和功率序列的大多數操作都基於Flint漸近快速的FFT乘法。同樣,大多數大型矩陣上的操作都利用了Flint中的快速整數矩陣乘法。
對於基本的算術,ARB通常應與MPFR(http://mpfr.org)一樣快,儘管它在低精度下可能會慢一點,並且速度約為MPFI(https://perso.enso.ens-lyon.ens-fr/nathalie.revol.revol/softwarewarewarewarewarewareware.html)。
ARB中的先驗功能非常優化,通常應該比當前可用的任何其他任意推薦軟件更快。下表比較評估高斯超幾何函數2F1(1/2, 1/4, 1, z)時間以秒為單位的時間z = 5^(1/2) + 7^(1/2)i ,與給定數量的十進制數字數字為2.8-git 2.8-git和mpmath 0.19 on 1.90 ghz intel in 3.0 ghz intel Intel in 3.0 on 3.0 on 3.0 on 3.0 in 3.0 n.5-4300u i5-43300u, Xeon X5675)。
| 數字 | 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取決於GMP(http://gmplib.org)或Mpir(http://mpir.org)和mpfr(http://mpfr.org)。
有關直接從源代碼構建和安裝ARB的說明,請參見http://arblib.org/setup.html。 ARB也可能作為您的Linux發行版本(或即將推出)。
sagemath(http://sagemath.org/)將ARB作為標準軟件包,並包含高級Python接口。請參閱Realballfield的SageMath文檔(http://doc.sagemath.org/html/en/reference/rings_numerical/sage/sage/rings/RINGS/REAL_ARB.HTML) (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html)。
Nemo(https://github.com/nemocas/nemo.jl/)是朱莉婭編程語言的計算機代數軟件包,其中包括高級朱莉婭接口到ARB。 NEMO安裝腳本將創建ARB的本地安裝以及其他依賴關係。
也可以使用flint和arb的獨立python接口(https://github.com/fredrik-johansson/python-flint)。
可以使用C99 complex double類型的先驗功能的單獨包裝器(https://github.com/fredrik-johansson/arbcmath)。
其他第三方包裝紙包括: