Je suis un utilisateur de MATLAB essayant de comprendre Python, désolé si cela est évident.

Si je dis

print(9**9)

J'obtiens: 387420489

Géniale.

Si je dis print(9**9**9) Python reste là indéfiniment et se fige (j'utilise Spyder version 4). Ctrl-C ne l'arrête pas. Pourquoi ne retourne-t-il pas immédiatement Inf? Est-ce un comportement attendu?

1
tomiyama 2 juin 2020 à 17:20

3 réponses

Meilleure réponse

Le num 9**9**9 est très gros à calculer vous pouvez attendre qu'il renvoie un résultat
ça peut prendre beaucoup de temps

0
dev55555 2 juin 2020 à 14:25

Lorsque vous effectuez des calculs numériques avec des entiers, python n'est pas limité aux nombres spécifiques à la machine tels que "int32", et donc un nombre tel que "2147483647" ne signifie pas grand-chose pour lui. Au lieu de cela, il utilise une bibliothèque "big integer", qui peut, en principe, exprimer n'importe quel grand nombre, à condition qu'il y ait suffisamment de mémoire pour cela. Face à un calcul tel que 9**9**9, python essaie de l'exécuter exactement , produisant le résultat exact, aussi grand soit-il. Pour ce calcul particulier, cela prend juste beaucoup de temps (et la mémoire, vraisemblablement en interne, python essaie d'allouer de plus en plus de mémoire si nécessaire).

1
printf 2 juin 2020 à 15:07

Pourquoi mon Python se fige-t-il lorsque je fais un calcul de dépassement de capacité?

Car aucun débordement ne s'est produit et python n'a pas abandonné. Python étendra la précision jusqu'à ce que le calcul réussisse ou que la machine soit à court de mémoire.

0
vikingosegundo 2 juin 2020 à 14:47