Как представить big_int?

Я работаю с типом big_int. Я посмотрел в библиотеке OCaml Pervasives.

Например: в Int32

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

Как я могу определить t и какой %?d, если я хочу объявить, что это big_int?


person Quyen    schedule 09.05.2012    source источник


Ответы (2)


Ниже представлена ​​сессия верхнего уровня. Директива #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 в том, что это отдельная загрузка (пока).

person Pascal Cuoq    schedule 09.05.2012
comment
Извините за новый вопрос, но как сделать ссылку из командной строки для компиляции? - person Dr Xorile; 02.04.2019
comment
@DrXorile Это новый вопрос, и вы могли бы получить ответ через 5 минут, если бы задали его как новый вопрос, который все могли бы увидеть. ocamlc nums.cma t.ml или ocamlopt nums.cmxa t.ml. - person Pascal Cuoq; 02.04.2019

Есть несколько современных библиотек "больших чисел" для OCaml, все интерфейсы про GNU MP:

  1. Мой собственный, mlgmp, который поставляется со многими дистрибутивами Linux как libgmp-ocaml.
  2. mlgmpidl от Bertrand Jeannet (ОСТОРОЖНО: и mlgmp, и mlgmpidl объявляют себя для ocamlfind пакетом Gmp, что приводит к странным конфликтам).
  3. Зарит

ZArith лучше по двум причинам:

  1. Он пытается, насколько это возможно, выполнять вычисления над машинными целыми числами перед размещением объектов GNU MP.
  2. Он размещает объекты GNU MP внутри кучи OCaml, в отличие от обычной схемы размещения через malloc(), которая не очень подходит для функционального программирования.
person David Monniaux    schedule 27.03.2013