我正在使用big_int
类型。我查看了 OCaml 的库Pervasives
。
例如:在Int32
let t = 5l
Printf.printf "%ld" t
如果我想声明它是一个,我t
该如何定义?%?d
big_int
下面是一个顶级会话。如果您使用编译器,该#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 的缺点是它是一个单独的下载(目前)。
OCaml 有几个现代“大数字”库,所有接口都是关于 GNU MP:
ZArith 更好有两个原因:
malloc()
,它不太适合函数式编程。