2010-08-24 14 views

risposta

20

È possibile impostare la precisione che si desidera con il decimalmodulo incorporato:

from decimal import * 
getcontext().prec = 40 
Decimal(1).exp() 

Ciò restituisce:

Decimal('2.718281828459045235360287471352662497757') 
+1

+1; per eventuali dubbi se questo funziona con precisione arbitraria, controlla la mia risposta. –

8

Questo può essere fatto anche con sympy utilizzando numerical evaluation:

import sympy 

print sympy.N(sympy.E, 100) 
+4

o usa il http://code.google.com/p/mpmath/ originale che sympy utilizza sotto il cofano. molto buona libreria Python per precisione arbitraria aritmetica in virgola mobile con un gran numero di funzioni, e il blog di Federico è divertente da leggere – user333700

3

penserei è possibile combinare le informazioni da queste pagine:

http://en.wikipedia.org/wiki/Taylor_series

Questo vi dà la serie di potenze familiare. Dato che stai lavorando con numeri fattoriali di grandi dimensioni, allora dovresti probabilmente lavorare con gmpy che implementa l'aritmetica multiiprecisione. Un esempio per la valutazione di pi greco è qui

http://wj32.wordpress.com/2007/12/04/ways-to-calculate-pi-in-python/

+0

_Power series_ in generale (tra cui Taylor serie di Maclaurin), ma sì. Vedi http://en.wikipedia.org/wiki/E_%28mathematical_constant%29#Representations per i dettagli sulla rappresentazione di 'e'. – mctylr

7

dato Utilizzando una somma serie si potrebbe calcolarlo:

getcontext().prec = 2000 
e = Decimal(0) 
i = 0 
while True: 
    fact = math.factorial(i) 
    e += Decimal(1)/fact 
    i += 1 
    if fact > 10**2000: break 

Ma non è davvero necessario, come quello che Mermoz fatto concorda bene con esso :

>>> e 
Decimal('2.7182818284590452353602874713526624977572470936999595749669676 
277240766303535475945713821785251664274274663919320030599218174135966290 
435729003342952605956307381323286279434907632338298807531952510190115738 
341879307021540891499348841675092447614606680822648001684774118537423454 
424371075390777449920695517027618386062613313845830007520449338265602976 
067371132007093287091274437470472306969772093101416928368190255151086574 
637721112523897844250569536967707854499699679468644549059879316368892300 
987931277361782154249992295763514822082698951936680331825288693984964651 
058209392398294887933203625094431173
823764648042953118023287825098194558153017567173613320698112509961818815 
930416903515988885193458072738667385894228792284998920868058257492796104 
841984443634632449684875602336248270419786232090021609902353043699418491 
463140934317381436405462531520961836908887070167683964243781405927145635 
490613031072085103837505101157477041718986106873969655212671546889570350 
681701210056278802351930332247450158539047304199 
577770935036604169973297250886876966403555707162268447162560798826517871 
341951246652010305921236677194325278675398558944896970964097545918569563 
802363701621120477427228364896134225164450781824423529486363721417402388 
934412479635743702637552944483379980161254922785092577825620926226483262 
779333865664816277251640191059004916449982893150566047258027786318641551 
956532442586982946959308019152987211725563475463964479101459040905862984 
967912874068705048958586717479854667757573205681288459205413340539220001 
137863009455606881667400169842055804033637953764520304024322566135278369 
511778838638744396625322498506549958862342818997077332761717839280349465 
014345588970719425863987727547109629537415211151368350627526023264847287 
039207643100595841166120545297030236472549296669381151373227536450988890 
313602057248176585118063036442812314965507047510254465011727211555194866 
850800368532281831521960037356252794495158284188294787610852639810') 
>>> Decimal(1).exp() 
Decimal('2.7182818284590452353602874713526624977572470936999595749669676 
277240766303535475945713821785251664274274663919320030599218174135966290 
435729003342952605956307381323286279434907632338298807531952510190115738 
341879307021540891499348841675092447614606680822648001684774118537423454 
424371075390777449920695517027618386062613313845830007520449338265602976 
067371132007093287091274437470472306969772093101416928368190255151086574 
637721112523897844250569536967707854499699679468644549059879316368892300 
987931277361782154249992295763514822082698951936680331825288693984964651 
058209392398294887933203625094431173
823764648042953118023287825098194558153017567173613320698112509961818815 
930416903515988885193458072738667385894228792284998920868058257492796104 
841984443634632449684875602336248270419786232090021609902353043699418491 
463140934317381436405462531520961836908887070167683964243781405927145635 
490613031072085103837505101157477041718986106873969655212671546889570350 
681701210056278802351930332247450158539047304199 
577770935036604169973297250886876966403555707162268447162560798826517871 
341951246652010305921236677194325278675398558944896970964097545918569563 
802363701621120477427228364896134225164450781824423529486363721417402388 
934412479635743702637552944483379980161254922785092577825620926226483262 
779333865664816277251640191059004916449982893150566047258027786318641551 
956532442586982946959308019152987211725563475463964479101459040905862984 
967912874068705048958586717479854667757573205681288459205413340539220001 
137863009455606881667400169842055804033637953764520304024322566135278369 
511778838638744396625322498506549958862342818997077332761717839280349465 
014345588970719425863987727547109629537415211151368350627526023264847287 
039207643100595841166120545297030236472549296669381151373227536450988890 
313602057248176585118063036442812314965507047510254465011727211555194866 
850800368532281831521960037356252794495158284188294787610852639814') 
+0

Ti rendi conto che l'ultima cifra della serie è sbagliata? (0, che dovrebbe essere 4). – kennytm

+0

Sì. –

1

Utilizzando Sage:

N(e, digits=2000) 
5

L'eccellente libreria pure-python, Mpmath, farà sicuramente il trucco.

L'unico obiettivo di questa libreria è multi-precisione aritmetica in virgola mobile.

esempio mpath può valutare e precisione arbitraria:

In [2]: from mpmath import * 
# set the desired precision on the fly 
In [3]: mp.dps=20; mp.pretty=True 
In [4]: +e 
Out[4]: 2.7182818284590452354 

# re-set the precision (50 digits) 
In [5]: mp.dps=50; mp.pretty=True 
In [6]: +e 
Out[6]: 2.7182818284590452353602874713526624977572470937 

Per inciso, Mpmath è anche strettamente integrato con Matplotlib.

Problemi correlati