我认为用整数来近似exp()
是不可能的。如果你使用3**n
来代替2.71828182845905**n
,那么你的计算将完全无用。
一种可能的解决方案是使用Sympy
。根据文档:
基本上没有上限精度
>>> from sympy import *
>>> exp(9500)
exp(9500)
>>> exp(9500).evalf()
6.27448493490172e+4125
您还可以指定所需的精度:
>>> exp(9500).evalf(1000)
6.274484934901720177929867046175406311474380389941415760684209191232450360090766458256588885184199320756050569665785657269735313171886975309933254563488343491718198237894473901620914303565550450204805537225888529509352754121292701357622411614860860409639719786022989336837263283678476008817556351031696366815467221836948040042378034720460820127399855873232167818091083005170669482845098735176209372328114732133251096196535355946589133977397512846130629857604295369747597459602137604440011394793443041829253598478244189078131130488653468669559814695095974271938947640276013215753183113041899037415404445478806695965167014404297848725756879184380559837391976534521522360723388582608454995349380217499779247330557664230806254642768796486899322646423713763772064068933790640394967085887914192401473425799354391464743910233873602389444180426155866237536459654917521713769608318128404177877383203786348495822099924812081683286880293701785567962687838594752986160305764297117036426951203418854463404773701882e+4125
使用 exp(9500).evalf(5000)
,你甚至可以得到最接近 exp(9500)
的整数。
exp(9500)
数字太大了。
但是log10(exp(9500))
并不是。在Python中不能用这种方式计算它,但是log10(exp(9500))
等于log(exp(9500))/ln(10)
,也就是9500/ln(10)
:
>>> from math import log
>>> 9500/log(10)
4125.797578080892
>>> int(9500/log(10))
4125
>>> 10**(9500/log(10) % 1)
6.274484934896202
这样,您可以在纯Python中计算exp(9500)
,不需要任何库,结果为6.27448493 * 10**4125
!
long
类型。int
类型已被移除。int
仍然存在(尽管对于这个问题,long
可能更合适)。https://docs.python.org/3/library/stdtypes.html - perigonmath.exp
的结果是一个浮点数。当需要时,Python已经隐式地将int
转换为long
。 - potato
exp(9500)
... - EOFlog((exp(9500)/n)*i)
等于9500 + log(i/n)
或者9500 + log(i) - log(n)
。然后所有内容都将在正常的双精度浮点数中运行。 - Mark Dickinson