当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管理浮点数?
我无法回答我自己的问题,所以就是这样。
问题是range(10**7)
是一个对python来说太大的列表。
现在它的工作原理如下:
def pow(n):
p = (1.0 + 1.0/n)
c = 0
while (c < n):
p = p * (1.0 + 1.0/n)
c += 1
return p
def e(k):
print "e with k =", k, 'is', pow(10**k)
map(e, range(1,21))
答案 0 :(得分:0)
你可能正在使用Python 2,其中range
创建了一个列表。因此,当您执行range(1,10**20)
时,您正在尝试创建一个长度为10 ** 20个元素的列表,这对于您的可用内存来说太大了。
相反,请使用xrange(1, n+1)
。然后去吃一些午餐,因为在这个循环结束之前它会有一段时间。 (或者,更改您的pow
函数,使其(1.0+1.0/n)**n
,而不是通过重复乘法手动进行取幂。)