Il est possible d'utiliser math.ceil(math.log(abs(x + 1)) / math.log(2)), mais tu vas rapidement perdre en précision car ça utilise des nombres flottants de taille fixe. Le type int de Python3 a une taille illimitée et peut faire plusieurs milliers/millions de bits.
Exemple :x=2**100-1; math.ceil(math.log(abs(x+1)) / math.log(2)), x.bit_length()
x=2**100; math.ceil(math.log(abs(x+1)) / math.log(2)), x.bit_length() donne (100, 100)
(100, 101)
À partir de 100 bits, la fonction utilisant math commence déjà à renvoyer des résultats faux.
[^] # Re: Bit_length
Posté par Victor STINNER (site web personnel) . En réponse à la dépêche Python arrive en version 3.1. Évalué à 10.
Il est possible d'utiliser math.ceil(math.log(abs(x + 1)) / math.log(2)), mais tu vas rapidement perdre en précision car ça utilise des nombres flottants de taille fixe. Le type int de Python3 a une taille illimitée et peut faire plusieurs milliers/millions de bits.
Exemple :
x=2**100-1; math.ceil(math.log(abs(x+1)) / math.log(2)), x.bit_length()
donnex=2**100; math.ceil(math.log(abs(x+1)) / math.log(2)), x.bit_length()
(100, 100)(100, 101)
À partir de 100 bits, la fonction utilisant math commence déjà à renvoyer des résultats faux.