python内存错误,溢出浮动?

时间:2014-03-16 22:48:14

标签: python floating-point

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^61344位。如何通过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))

1 个答案:

答案 0 :(得分:0)

你可能正在使用Python 2,其中range创建了一个列表。因此,当您执行range(1,10**20)时,您正在尝试创建一个长度为10 ** 20个元素的列表,这对于您的可用内存来说太大了。

相反,请使用xrange(1, n+1)。然后去吃一些午餐,因为在这个循环结束之前它会有一段时间。 (或者,更改您的pow函数,使其(1.0+1.0/n)**n,而不是通过重复乘法手动进行取幂。)