Вычислить e (основание натурального журнала) с высокой точностью в Python?

В Java, когда оператор «==» используется для сравнения двух объектов, он проверяет, ссылаются ли объекты на одно и то же место в памяти. Другими словами, он проверяет, являются ли имена двух объектов в основном ссылками на одно и то же место в памяти.

Класс Java String фактически переопределяет реализацию equals () по умолчанию в классе Object и переопределяет этот метод, чтобы он проверял только значения строк, а не их местоположения в памяти. Это означает, что если вы вызываете метод equals () для сравнения двух объектов String, то, пока действительная последовательность символов равна, оба объекта считаются равными.

Оператор == проверяет, являются ли две строки точно одним и тем же объектом.

Метод .equals() проверяет, имеют ли две строки одно и то же значение.

13
задан Peter Mortensen 28 April 2014 в 15:54
поделиться

6 ответов

Вы можете установить нужную точность с помощью десятичного встроенного модуля:

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

Это возвращает:

Decimal('2.718281828459045235360287471352662497757')
21
ответ дан 1 December 2019 в 17:54
поделиться

Это также можно сделать с помощью sympy , используя числовую оценку :

import sympy

print sympy.N(sympy.E, 100)
8
ответ дан 1 December 2019 в 17:54
поделиться

Используя сумму ряда, вы можете вычислить ее:

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

Но в этом нет необходимости, поскольку то, что сделал Мермоз, прекрасно с этим согласуется:

>>> e 
Decimal('2.7182818284590452353602874713526624977572470936999595749669676 
277240766303535475945713821785251664274274663919320030599218174135966290 
435729003342952605956307381323286279434907632338298807531952510190115738 
341879307021540891499348841675092447614606680822648001684774118537423454 
424371075390777449920695517027618386062613313845830007520449338265602976 
067371132007093287091274437470472306969772093101416928368190255151086574 
637721112523897844250569536967707854499699679468644549059879316368892300 
987931277361782154249992295763514822082698951936680331825288693984964651 
058209392398294887933203625094431173012381970684161403970198376793206832 
823764648042953118023287825098194558153017567173613320698112509961818815 
930416903515988885193458072738667385894228792284998920868058257492796104 
841984443634632449684875602336248270419786232090021609902353043699418491 
463140934317381436405462531520961836908887070167683964243781405927145635 
490613031072085103837505101157477041718986106873969655212671546889570350 
354021234078498193343210681701210056278802351930332247450158539047304199 
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 
058209392398294887933203625094431173012381970684161403970198376793206832 
823764648042953118023287825098194558153017567173613320698112509961818815 
930416903515988885193458072738667385894228792284998920868058257492796104 
841984443634632449684875602336248270419786232090021609902353043699418491 
463140934317381436405462531520961836908887070167683964243781405927145635 
490613031072085103837505101157477041718986106873969655212671546889570350 
354021234078498193343210681701210056278802351930332247450158539047304199 
577770935036604169973297250886876966403555707162268447162560798826517871 
341951246652010305921236677194325278675398558944896970964097545918569563 
802363701621120477427228364896134225164450781824423529486363721417402388 
934412479635743702637552944483379980161254922785092577825620926226483262 
779333865664816277251640191059004916449982893150566047258027786318641551 
956532442586982946959308019152987211725563475463964479101459040905862984 
967912874068705048958586717479854667757573205681288459205413340539220001 
137863009455606881667400169842055804033637953764520304024322566135278369 
511778838638744396625322498506549958862342818997077332761717839280349465 
014345588970719425863987727547109629537415211151368350627526023264847287 
039207643100595841166120545297030236472549296669381151373227536450988890 
313602057248176585118063036442812314965507047510254465011727211555194866 
850800368532281831521960037356252794495158284188294787610852639814') 
7
ответ дан 1 December 2019 в 17:54
поделиться

Я думаю, вы могли бы объединить информацию с этих веб-страниц:

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

Это даст вам знакомую силовую серию. Поскольку вы работаете с большими факторными числами, вам, вероятно, следует работать с gmpy, который реализует арифметику с множественной точностью. Пример вычисления числа пи приведен здесь

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

3
ответ дан 1 December 2019 в 17:54
поделиться

Отличная библиотека на чистом Python, Mpmath, безусловно, поможет.

Единственной целью этой библиотеки является арифметика с плавающей запятой повышенной точности.

Например, Mpath может оценивать e с произвольной точностью:

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

Кроме того, Mpmath также тесно интегрирован с Matplotlib.

5
ответ дан 1 December 2019 в 17:54
поделиться

Использование Sage:

N(e, digits=2000)
1
ответ дан 1 December 2019 в 17:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: