Bonjour,
J'utilise le type big_int, existe-t-il un moyen "direct" d'en connaitre la longueur en binaire ?
Par direct je veux dire en évitant tout algorithme de décomposition en base 2 (par divisions successives par 2).
Merci d'avance.
Bonjour,
J'utilise le type big_int, existe-t-il un moyen "direct" d'en connaitre la longueur en binaire ?
Par direct je veux dire en évitant tout algorithme de décomposition en base 2 (par divisions successives par 2).
Merci d'avance.
Cf le fichier big_int.mli
Je crois que ce que tu cherches est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 val num_digits_big_int : big_int -> int (** Return the number of machine words used to store the given big integer. *)
Bonjour,
J'avais effectivement vu cette fonction, mais apparement ce n'est pas cela.
me renvoie 1 alors que l'on devrait trouver 3. Et d'ailleurs elle renvoie presque toujours 1. Je ne sais pas ce que fait cette fonction ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 num_digits_big_int (big_int_of_int 7);;
Oui, parce que les big_int sont probablement stockés dans un tableau d'int. La fonction te renvoie, je crois, le nombre d'int (en mémoire, donc sans le bit du GC de Caml) utilisés.
Chez moi :
4294967295 renvoie 1
4294967296 renvoie 2
C'est la seule valeur directe que tu peux avoir, d'après l'interface fournie.
Pour connaître le nombre de chiffres en base 2, tu dois donc le calculer toi-même. Pour réduire la complexité (ce qui n'a un intérêt que si les nombres manipulés sont extrèmement grands), tu peux te baser sur l'information donnée (fais attention : la valeur renvoyée dépend de l'architecture).
Arf, d'accord, c'est bien dommage ...
En réalité je dois travailler avec des approximations entieres de log en base 2 (afin de gagner en rapidité, car les nombres manipulés sont grands). Et c'est pour cette raison que je voulais connaitre le nombre de bits.
Malheureusement, il semblerait que calculer un tel log par la méthode des divisions successives par 2 ralentisse encore plus l'execution, contrairement à ce que l'on voulait ... :/
Nilss.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager