贡献者: addis
Arb 是一个支持任意精度计算的 C/C++ 库(也提供 python 接口),支持对计算进行严谨的误差估计,即每个任意精度浮点数
以 Ubuntu 为例,最方便的安装方式就是使用 apt
安装。首先安装 dependency
MPFR
和 flint
两个包分别用于任意精度浮点数以及数论。然后安装 Arb
但目前这并不是 Arb 的最新版本(例如没有实现库仑函数)。要获得最新版本,可以直接从 GitHub 下载源码编译即可(默认使用 gcc 编译器)。目前笔者使用的版本是 release 2.19.0(ubuntu 20.04 和 22.04 均可直接用 apt 安装更高版本)。
可以用 ./configure --help
查看编译选项,若所有的包都安装在默认目录则不需要编译选项。
-j4
是使用 4 线程进行编译,也可以改成其他数字。
要在 windows 上安装,参考这个。这里面的 dll 是可以直接拿来用的,无需编译。
在 Ubuntu 中如果你使用 apt
安装,在编译程序是需要加 -lflint-arb
选项。如果你直接从源码编译,则需要加 -larb
选项。对一些编译器(例如 intel 的 icpc
),可能还需要加上 -lflint, -lmpfr, -lgmp
,如果 link 阶段遇到问题可以试试加上。
一个 C++ 例程:该程序用 80 bit 初始精度计算复参数的超几何函数
确认版本:arb.h
头文件中定义了版本宏
数学常数(prec
是结果的二进制精度,跟上面的 hypergeom1F1
不同):
void arb_const_pi(arb_t z, slong prec)
圆周率
void arb_const_sqrt_pi(arb_t z, slong prec)
根号圆周率
arb_const_log2
void arb_const_e(arb_t z, slong prec)
ARF_PREC_EXACT
的定义是 std::numeric_limits<slong>::max()
arf_t
是任意精度浮点数,文档。
arf_t
的数据结构,看懂下面的代码就了解了。基本就是小数部分 .d
(例如 0.100101110,小数点后面用一个 flint 大整数表示),指数部分 .exp
(一个 flint 大整数),和 .size
部分(最后一 bit 是符号位,1 表示复数,.size >> 1
是用到的 limb 的个数,这可能和 alloc 的 limb 的个数是不一样的)。
.size == 0
时,arf_t
是某个 special 值,即:.exp == ARF_EXP_ZERO
时,arf 为零;.exp == ARF_EXP_POS_INF
时,arf 为正无穷;.exp == ARF_EXP_NEG_INF
时,arf 为负无穷;.exp == ARF_EXP_NAN
是,arf 为 nan;如果不是 special,就叫做 normal。
arf_is_special
,arf_is_zero
,arf_is_pos_inf
,arf_is_neg_inf
,arf_is_nan
,arf_is_normal
,arf_is_finite
,arf_is_inf
,arf_is_one
它表示的值为 x->man * 2^ (x->exp - MAG_BITS)
其中 #define MAG_BITS 30
。
文档。
就是两个 arb
类型
友情链接: 超理论坛 | ©小时科技 保留一切权利