2 votes

Comment présenter big_int ?

Je travaille avec big_int type. J'ai regardé dans la bibliothèque d'OCaml Pervasives .

Par exemple : en Int32

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

Comment puis-je définir t et qui %?d si je veux déclarer qu'il s'agit d'un big_int ?

11voto

Pascal Cuoq Points 39606

La session ci-dessous est une session à deux niveaux. La session #load deviendrait une option de lien en ligne de commande si vous utilisiez le compilateur :

# #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 = ()

Pour les nombres qui ne rentrent pas dans une case native int , utiliser Big_int.big_int_of_string . Exemple : Big_int.big_int_of_string "99999999999999999999999" .

La liste complète des fonctions est la suivante ici .

Enfin, le Big_int Le module est assez vieux et maladroit. L'interface remonte à l'époque de Camlight, où le système de modules était rudimentaire. C'est la raison pour laquelle chaque nom de fonction répète de manière redondante "big_int...". Si vous devez choisir une bibliothèque pour les gros entiers, je vous recommanderais plutôt Zarith qui est moderne et efficace. L'inconvénient de Zarith est qu'il s'agit d'un téléchargement séparé (pour l'instant).

5voto

monniaux Points 838

Il existe plusieurs bibliothèques modernes de "grands nombres" pour OCaml, toutes interfacées avec GNU MP :

  1. Le mien, mlgmp, qui est fourni avec de nombreuses distributions Linux sous le nom de libgmp-ocaml.
  2. mlgmpidl de Bertrand Jeannet (ATTENTION : mlgmp et mlgmpidl se déclarent tous deux à ocamlfind comme le paquet Gmp, d'où des conflits bizarres).
  3. ZArith

ZArith est meilleur pour deux raisons :

  1. Il essaie autant que possible d'effectuer des calculs sur les entiers de la machine avant d'allouer les objets GNU MP.
  2. Il alloue les objets GNU MP à l'intérieur du tas d'OCaml, par opposition au schéma d'allocation normal par le biais de malloc() qui n'est pas très adapté à la programmation fonctionnelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X