私は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にはいくつかの最新の「ビッグナンバー」ライブラリがあり、GNUMPに関するすべてのインターフェイスは次のとおりです。
ZArithは、次の2つの理由で優れています。
malloc()
関数型プログラミングにはあまり適していない、を介した通常の割り当てスキームとは対照的に、OCamlヒープ内にGNUMPオブジェクトを割り当てます。