Arb任意精度區(qū)間算法 C 庫
Arb 是一個用于任意精度區(qū)間算法的 C 語言庫,完全支持實數(shù)和復(fù)數(shù)。該庫線程安全、可移植,且經(jīng)過廣泛測試。
特征
- 除了基本算術(shù),Arb 還允許處理單變量多項式、截斷冪級數(shù)以及實數(shù)和復(fù)數(shù)矩陣。
- 支持基本線性代數(shù),包括矩陣乘法、行列式、逆、非奇異求解、矩陣指數(shù)以及特征值和特征向量的計算。
- 對多項式和冪級數(shù)的支持非常廣泛,包括組合、回歸、乘積樹、多點評估和插值、復(fù)根隔離和冪級數(shù)的超越函數(shù)的方法。
- 其他功能包括實函數(shù)的根隔離、復(fù)雜函數(shù)的嚴格數(shù)值積分和離散傅立葉變換 (DFT)。
代碼示例
以下程序評估 sin(pi + exp(-10000)),由于正弦函數(shù)的輸入將根匹配到 4343 數(shù)位以內(nèi),因此至少需要 4343 個數(shù)位(14427-bit)精度才能獲得準確的結(jié)果。程序以 64 bit、128 bit 、... 精度重復(fù)計算,僅在結(jié)果準確到至少 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();
}
輸出:
[+/- 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 的自動錯誤邊界跟蹤來獲得保證準確的輸出—— 用戶無需進行錯誤分析。
依賴項
Arb 依賴于
- FLINT ( http://flintlib.org/ )、
- GMP ( http://gmplib.org ) 或 MPIR ( http://mpir.org )
- MPFR ( http://mpfr.org )。
評論
圖片
表情
