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
?
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
?
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).
Il existe plusieurs bibliothèques modernes de "grands nombres" pour OCaml, toutes interfacées avec GNU MP :
ZArith est meilleur pour deux raisons :
malloc()
qui n'est pas très adapté à la programmation fonctionnelle. 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.