on a very slow function

bartc bc at freeuk.com
Mon Oct 2 07:24:03 EDT 2017


On 02/10/2017 08:41, Peter Otten wrote:
> Daniel Bastos wrote:
> 
>> def make_sequence_non_recursive(N, x0 = 2, c = -1):
>>    "What's wrong with this function?  It's very slow."
>>    last = x0
>>    def sequence():
>>      nonlocal last
>>      next = last
>>      last = last**2 + c
>>      return next % N
>>    return sequence

>>>> x.bit_length()
> 12534884
> 
> So at this point it alreay would take 1.5 MB to store the number in binary.
> The actual format requires even a bit more memory:
> 
>>>> import sys
>>>> sys.getsizeof(x)
> 1671344
> 
> So for every operation you have to touch a lot of memory -- and that takes
> time.

If it recalculates 'last' once for each of those couple of dozen printed 
lines, that I doubt accessing a few MB of memory is the issue. More 
doing such a big calculation.

-- 
bartc



More information about the Python-list mailing list