我正在做一个作业来计算e
,当n
趋向于(1+1/n)^n
的无穷大时。我知道这是一个非常愚蠢的计算方法,但我必须这么做。在
我应该测试我的结果的值高达n = 10 ^20
。在
然而,我的程序在10^7
时因内存错误而死亡,我不确定原因。这是我的代码:
def pow(n):
p = (1.0 + 1.0/n)
for _ in range(1,n+1):
p = p * (1.0 + 1.0/n)
return p
def e(k):
print 'e with k =', k, 'is', pow(10**k)
map(e, range(1,21))
所以我的问题是这里发生了什么?我是否溢出了python用来存储我的p
变量的内容?如果是这样,它必须非常大10^6
是1344
位长。python如何管理float?在
我还不能回答我自己的问题,所以就在这里。在
问题是range(10**7)
是一个对于python来说太大的列表。
现在它是这样工作的:
您可能正在使用python2,其中
range
创建一个列表。所以当你做range(1,10**20)
时,你试图创建一个10*20个元素的列表,这对于你的可用内存来说太大了。在相反,请使用
xrange(1, n+1)
。那就去吃午饭吧,因为要过一段时间才能完成循环。(或者,更改您的pow
函数,使其执行(1.0+1.0/n)**n
,而不是通过重复乘法手动求幂。)相关问题 更多 >
编程相关推荐