2015-10-12 4 views
-2

Я нахожусь в университете в данный момент, и один из моих испытуемых - дискретная математика. Из дискретных математических я знаю, что n! > 2^n для n> 3. Я знаю, что python может вычислить 20 000 !, я сделал это на своем компьютере, если ему требуется несколько секунд. Но он не может вычислить 2 мощности всего лишь 1500, что, безусловно, меньше. Любые идеи почему?Python вычислительная мощность по сравнению с факториалом

+0

Вы можете вычислить 2^(20000) в мигании с питоном. – sashas

+0

В python: '2 ** 1500' – khelwood

+1

* дискретный * математика и * сдержанный * математика - это разные вещи ... – donkopotamus

ответ

2

Это, по-видимому, проблема только в функции math.pow, предоставляемой стандартом C. Кажется, что он терпит неудачу, потому что math.pow использует поплавки, но ** использует long. math.pow(2, 1023) будет работать, math.pow(2, 1024) не получится.

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

Спасибо! Я не знал о ** операторе для python. – Ubermidget2

Смежные вопросы