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)。
其他第三方包装纸包括: