Question
Je me suis ennuyé et jouer avec la console ipython et suis tombé sur le comportement suivant, je ne comprends pas vraiment
In [1]: 2**2
Out[1]: 4
In [2]: 2**2**2
Out[2]: 16
In [3]: 2**2**2**2
Out[3]: 65536
In [4]: 2**2**2**2**2
La réponse à [4] est pas 4294967296L, il est un très long, mais je ne peux pas vraiment comprendre pourquoi.
Le numéro se trouve ici: http://pastie.org/475714
(Ubuntu 8.10, python 2.5.2, 0.8.4 ipython)
(Mac OS X 10.5.6, Python 2.5.1)
La solution
Python va droite à gauche sur l'opération de puissance mathématique. Par exemple, IN [2] fait:
2 ** (4) = 16
IN [3] = 2 2 2 2 = 2 2 ** (4) = 2 ** 16 = 65536
Vous auriez besoin entre parenthèses si vous voulez calculer de gauche à droite. La raison OUT [4] n'est pas sortie la réponse que vous voulez est parce que le nombre est astronomique et Python ne peut pas imprimer.
2 ^ 65536 = extrêmement énorme
Autres conseils
La priorité de l'opérateur ** fait l'évaluation va de droite à gauche (au lieu de l'attendre de gauche à droite). En d'autres termes:
2**2**2**2 == (2**(2**(2**2)))
En effet, l'ordre de priorité en Python provoque cette équation à évaluer de droite à gauche.
>>> 2**2
4
>>> 2**2**2
16
>>> 2**(2**2)
16
>>> 2**2**2**2
65536
>>> 2**2**(2**2)
65536
>>> 2**(2**(2**2))
65536
>>> 2**2**2**2**2
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**2**2**(2**2)
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**2**(2**(2**2))
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**(2**(2**(2**2)))
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**255
57896044618658097711785492504343953926634992332820282019728792003956564819968L
L'évaluation de droite à gauche, regardons les étapes Python va à travers pour obtenir ces réponses:
2**2
4
2**(2**2)
2**(4)
16
2**(2**(2**2))
2**(2**(4))
2**(16)
65536
2**(2**(2**(2**2)))
2**(2**(2**(4)))
2**(2**(16))
2**(65536)
2.0035299304068464649790723515603e+19728