Arb任意精度区间算法 C 库

联合创作 · 2023-09-30 15:52

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 依赖于

 

浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报