Arb 是一个用于任意精度区间算法的 C 语言库,完全支持实数和复数。该库线程安全、可移植,且经过广泛测试。
特征
- 除了基本算术,Arb 还允许处理单变量多项式、截断幂级数以及实数和复数矩阵。
- 支持基本线性代数,包括矩阵乘法、行列式、逆、非奇异求解、矩阵指数以及特征值和特征向量的计算。
- 对多项式和幂级数的支持非常广泛,包括组合、回归、乘积树、多点评估和插值、复根隔离和幂级数的超越函数的方法。
- 其他功能包括实函数的根隔离、复杂函数的严格数值积分和离散傅立叶变换 (DFT)。
代码示例
以下程序评估 sin(pi + exp(-10000)),由于正弦函数的输入将根匹配到 4343 数位以内,因此至少需要 4343 个数位(14427-bit)精度才能获得准确的结果。程序以 64 bit、128 bit 、... 精度重复计算,仅在结果准确到至少 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 )。