我查了一些资料,根据这篇文章,标准库中曾经有一个Bignum模块。但是现在,我却没有在标准库中找到任何相关内容。
OCaml核心发行版中没有bignum模块。 官方建议 是使用第三方Zarith
库,特别是它的Z
模块。
如果您已将OCaml安装为操作系统分发的一部分,请查看是否有Zarith的软件包。例如,在Debian、Ubuntu和衍生产品上,它是libzarith-ocaml-dev
。如果Zarith在操作系统中不可用,请使用OPAM进行安装:
opam install zarith
在构建应用程序时,使用以下之一进行编译:
ocamlc -I +zarith zarith.cma …
ocamlopt -I +zarith zarith.cmxa …
ocamlfind <COMMAND> -package zarith -linkpkg …
要在toplevel中使用Zarith:
ocaml -I +zarith zarith.cma zarith_top.cma
Ocaml的旧版本在标准发行版中有一个bignum模块(但不在标准库中:它不需要单独安装,但必须显式链接)。这是nums
库,其主模块为Num
。从OCaml 4.06开始,nums
库被分开发行。
从技术上讲,在标准库中没有bignum模块,因为Ocaml术语中的标准库是程序编译所依赖的默认库,其中没有bignum模块。也没有Bignum
库,因为bignum库被称为nums
,其主模块称为Num
。自Ocaml被称为Ocaml之前,它就已经成为标准Ocaml发行版的一部分,现在仍然如此。
num
库。严格来说,它并不是“标准库”的一部分,但是它是标准发行版的一部分。因此,只需使用该库进行编译即可使用。另外,您可能会对新的 zarith 库感兴趣。我不确定这两个库之间的差异。Big_int
替换为 Zarith 可以节省50%的内存并提高33%的执行时间。在仅使用小整数的纯整数基准测试中,Zarith 的速度提高了8倍。(Big_int
比 int
慢32倍,而 Zarith 比 int
慢3.9倍)。 - Pascal Cuoq除了其他回答之外,一般的任意精度模块是 Num
(它包括大整数和大有理数)。此外,还有一个专门用于大整数的 Big_int
模块;Num
使用 Big_int
模块来支持大整数,但如果您只需要大整数而不是分数,可以直接使用 Big_int
。这两者都是 num
库的一部分。
num
已经被取代了。根据https://github.com/ocaml/num的说法,“需要任意精度算术的新应用程序应该使用Zarith库(https://github.com/ocaml/Zarith)而不是Num库,而已经使用Num的旧应用程序则被鼓励切换到Zarith。Zarith比Num具有更好的性能和更好的API。”bignum
是Zarith的包装器。 - Mars