On Mon, Apr 25, 2016 at 4:03 AM, Derek Klinge <schilke...@gmail.com> wrote: > Ok, from the gmail web client:
Bouncing this back to the list, and removing quote markers for other people's copy/paste convenience. ## Write a method to approximate Euler's Number using Euler's Method import math class EulersNumber(): def __init__(self,n): self.eulerSteps = n self.e = self.EulersMethod(self.eulerSteps) def linearApproximation(self,x,h,d): # f(x+h)=f(x)+h*f'(x) return x + h * d def EulersMethod(self, numberOfSteps): # Repeate linear approximation over an even range e = 1 # e**0 = 1 for step in range(numberOfSteps): e = self.linearApproximation(e,1.0/numberOfSteps,e) # if f(x)= e**x, f'(x)=f(x) return e def EulerStepWithGuess(accuracy,guessForN): n = guessForN e = EulersNumber(n) while abs(e.e - math.e) > abs(accuracy): n +=1 e = EulersNumber(n) print('n={} \te= {} \tdelta(e)={}'.format(n,e.e,abs(e.e - math.e))) return e def EulersNumberToAccuracy(PowerOfTen): x = 1 theGuess = 1 thisE = EulersNumber(1) while x <= abs(PowerOfTen): thisE = EulerStepWithGuess(10**(-1*x),theGuess) theGuess = thisE.eulerSteps * 10 x += 1 return thisE > To see an example of my problem try something like EulersNumberToAccuracy(-10) Yep, I see it. I invoked your script as "python3 -i euler.py" and then made that call interactively. It quickly ran through the first few iterations, and then had one CPU core saturated; but at no time did memory usage look too bad. You may be correct in Python 2, though - it started using about 4GB of RAM (not a problem to me - I had about 9GB available when I started it), and then I halted it. The Python 3 version has been running for a few minutes now. n=135914023 e= 2.718281818459972 delta(e)=9.999073125044333e-09 'top' says: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7467 rosuav 20 0 32432 9072 4844 R 100.0 0.1 3:58.44 python3 In other words, it's saturating one CPU core ("%CPU 100.0"), but its memory usage (VIRT/RES/SHR) is very low. At best, this process can be blamed for 0.1% of memory. Adding these lines to the top makes it behave differently in Python 2: try: range = xrange except NameError: pass The Py3 behaviour won't change, but Py2 should now have the same kind of benefit (the xrange object is an iterable that doesn't need a concrete list of integers). ChrisA -- https://mail.python.org/mailman/listinfo/python-list