如何呈现big_int?

Quy*_*yen 2 ocaml bignum

我正在使用big_int类型.我查看了OCaml的图书馆Pervasives.

例如:in Int32

let t = 5l
Printf.printf "%ld" t
Run Code Online (Sandbox Code Playgroud)

如何定义t以及%?d如果我要声明它是big_int哪个?

Pas*_*uoq 9

下面是一个顶级会议.#load如果您使用编译器,该指令将成为命令行链接选项:

# #load "nums.cma" ;;
# let t = Big_int.big_int_of_int 5 ;;
val t : Big_int.big_int = <abstr>
# Printf.printf "%s" (Big_int.string_of_big_int t) ;;
5- : unit = ()
Run Code Online (Sandbox Code Playgroud)

对于不适合原生的数字,请int使用Big_int.big_int_of_string.示例:Big_int.big_int_of_string "99999999999999999999999".

完整的功能列表在这里.

最后,该Big_int模块非常古老而笨拙.界面可以追溯到caml-light,其中模块系统是基本的.这就是每个函数名称冗余重复"big_int ..."的原因.如果您现在正在选择一个大整数库,我会推荐Zarith,它既现代又高效.Zarith的缺点是它是一个单独的下载(目前).


Dav*_*aux 5

对于OCaml,有几个现代的“大数目”库,所有关于GNU MP的接口:

  1. 我自己的mlgmp,与许多Linux发行版一起提供,如libgmp-ocaml。
  2. 来自Bertrand Jeannet的mlgmpidl(注意:mlgmp和mlgmpidl都将自己声明为ocamlfind作为Gmp软件包,因此发生了奇怪的冲突)。
  3. 扎里斯

ZArith更好的原因有两个:

  1. 在分配GNU MP对象之前,它会尝试尽可能多地对机器整数执行计算。
  2. 它通过OCaml堆分配GNU MP对象malloc(),这与通过分配的普通分配方案相反,后者不太适合函数式编程。