On Apr 18, 3:09�am, Steven D'Aprano <s...@REMOVEME.cybersource.com.au>
wrote:
On Wed, 18 Apr 2007 07:15:11 +0200, Hendrik van Rooyen wrote:
I once made a thing that tried to find the limit of longs and stopped
when I had two or three screenfulls of numbers.
You should find that converting longs to strings (say, for printing them)
is *very* slow. E.g. the following code
big = 10L**100 # one google, a big number
while True:
* * print big # so we can see the last value before it fails
* * big *= 10
will run terribly slow and should be written as:
big = 10L**100 # one google, a big number
try:
* * while True:
* * * * big *= 10
except: # don't know what exception will be raised, so catch ANYTHING
* * print len(str(big))-1 # the number of digits
only does the slow conversion to string once, instead of every time around
the loop. However, once your machine starts paging, it will still slow
down a lot.
I came to the conclusion that for "integer" arithmetic like this, the
limit is either your memory size, or some other number that is so big
that in practice you don't have to worry about it..
Yes, longs are limited only by the amount of memory accessible.
But there may be other limitations even if you have the memory.
For example, this test is limited to generation 10
because tne 11th generation produces "outrageous
exponent" error. Here, every 9th 1st generation,
starting from the fifth is a second generation, every
9th sencond, starting from the fifth, is a 3rd generation,
every 9th 3rd gen, starting from the 5th is a 4th gen, etc.
Closed form: Type12MH(k,i)
Find ith, kth Generation Type [1,2] Mersenne Hailstone
using the closed form equation
2**(6*((i-1)*9**(k-1)+(9**(k-1)-1)/2+1)-1)-1
2**5-1 generation: 1
2**29-1 generation: 2
2**245-1 generation: 3
2**2189-1 generation: 4
2**19685-1 generation: 5
2**177149-1 generation: 6
2**1594325-1 generation: 7
2**14348909-1 generation: 8
2**129140165-1 generation: 9
2**1162261469-1 generation:10
1.797 seconds
There is never a number too large to worry about.
>
--
Steven D'Aprano