2015-10-12 1 views
-2

Je suis à l'université en ce moment et l'un de mes sujets est les mathématiques discrètes. De mathématiques discrètes, je sais que n! > 2^n pour n> 3. Je sais que python peut calculer 20 000! Je l'ai fait sur mon ordinateur, à condition que cela prenne quelques secondes. Mais il ne peut pas calculer 2 à la puissance de quelque chose aussi peu que 1500, ce qui est certainement plus petit. Des idées pourquoi?Python calculant le pouvoir par rapport au factoriel

+0

Vous pouvez calculer 2^(20000) en un clin d'œil avec python. – sashas

+0

En python: '2 ** 1500' – khelwood

+1

* les mathématiques discrètes * et * les mathématiques discrètes sont des choses différentes ... – donkopotamus

Répondre

2

Il semble que ce soit uniquement un problème dans la fonction math.pow fournie par la norme C. Il semble échouer car math.pow utilise des flottants, mais ** utilise long. math.pow(2, 1023) fonctionnera, math.pow(2, 1024) échouera.

In [1]: 2**1500 
Out[1]: 35074662110434038747627587960280857993524015880330828824075798024790963850563322203657080886584969261653150406795437517399294548941469959754171038918004700847889956485329097264486802711583462946536682184340138629451355458264946342525383619389314960644665052551751442335509249173361130355796109709885580674313954210217657847432626760733004753275317192133674703563372783297041993227052663333668509952000175053355529058880434182538386715523683713208549376L 

In [2]: from math import pow 

In [3]: pow(2, 1500) 
--------------------------------------------------------------------------- 
OverflowError        Traceback (most recent call last) 
<ipython-input-3-fa67a1c786b4> in <module>() 
----> 1 pow(2, 1500) 

OverflowError: math range error 
+0

Merci! Je ne connaissais pas l'opérateur ** pour python. – Ubermidget2