2

我正在使用big_int类型。我查看了 OCaml 的库Pervasives

例如:在Int32

let t = 5l
Printf.printf "%ld" t

如果我想声明它是一个,我t该如何定义?%?dbig_int

4

2 回答 2

10

下面是一个顶级会话。如果您使用编译器,该#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 = ()

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

完整的函数列表在这里

最后,该Big_int模块相当陈旧且笨拙。该界面可以追溯到 caml-light,其中的模块系统是初级的。这就是为什么每个函数名都重复“big_int...”的原因。如果您现在正在选择一个大型整数库,我会推荐Zarith,它是现代且高效的。Zarith 的缺点是它是一个单独的下载(目前)。

于 2012-05-09T11:33:19.380 回答
5

OCaml 有几个现代“大数字”库,所有接口都是关于 GNU MP:

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

ZArith 更好有两个原因:

  1. 它在分配 GNU MP 对象之前尽可能多地尝试对机器整数执行计算。
  2. 它在 OCaml 堆内分配 GNU MP 对象,这与普通的分配方案相反malloc(),它不太适合函数式编程。
于 2013-03-27T17:43:19.710 回答