Arb任意精度区间算法 C 库
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 )。
 
评论
