OK. I know I made a mistake by saying, "computers are very good at *exhaustively* searching multidimensional spaces." I should have said, "computers are very good at enumerating examples from multi-dimensional spaces" or something to that effect. Now that we've had our fun, can you guys please continue in a forked conversation so it doesn't derail the conversation? On Wed, Nov 28, 2018 at 7:47 PM David Mertz <mertz@gnosis.cx> wrote:
I was assuming it was a Numba-ized function since it's purely numeric. ;-)
FWIW, the theoretical limit of Python ints is limited by the fact 'int.bit_length()' is a platform native int. So my system cannot store ints larger than (2**(2**63-1)). It'll take a lot more memory than my measly 4GiB to store that number though.
So yes, that's way longer that heat-death-of-universe even before 128-bit machines are widespread.
On Wed, Nov 28, 2018, 6:43 PM Antoine Pitrou <antoine@python.org wrote:
But Python integers are variable-sized, and their size is basically limited by available memory or address space.
Let's take a typical 64-bit Python build, assuming 4 GB RAM available. Let's also assume that 90% of those 4 GB can be readily allocated for Python objects (there's overhead, etc.).
Also let's take a look at the Python integer representation:
sys.int_info sys.int_info(bits_per_digit=30, sizeof_digit=4)
This means that every 4 bytes of integer object store 30 bit of actual integer data.
So, how many bits has the largest allocatable integer on that system, assuming 90% of 4 GB are available for allocation?
nbits = (2**32)*0.9*30/4 nbits 28991029248.0
Now how many possible integers are there in that number of bits?
x = 1 << int(nbits) x.bit_length() 28991029249
(yes, that number was successfully allocated in full. And the Python process occupies 3.7 GB RAM at that point, which validates the estimate.)
Let's try to have a readable approximation of that number. Convert it to a float perhaps?
float(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: int too large to convert to float
Well, of course. So let's just extract a power of 10:
math.log10(x) 8727169408.819794 10**0.819794 6.603801339268099
(yes, math.log10() works on non-float-convertible integers. I'm impressed!)
So the number of representable integers on that system is approximately 6.6e8727169408. Let's hope the Sun takes its time.
(and of course, what is true for ints is true for any variable-sized input, such as strings, lists, dicts, sets, etc.)
Regards
Antoine.
Le 29/11/2018 à 00:24, David Mertz a écrit :
That's easy, Antoine. On a reasonable modern multi-core workstation, I can do 4 billion additions per second. A year is just over 30 million seconds. For 32-bit ints, I can whiz through the task in only 130,000 years. We have at least several hundred million years before the sun engulfs us.
On Wed, Nov 28, 2018, 5:09 PM Antoine Pitrou <solipsis@pitrou.net <mailto:solipsis@pitrou.net> wrote:
On Wed, 28 Nov 2018 15:58:24 -0600 Abe Dillon <abedillon@gmail.com <mailto:abedillon@gmail.com>> wrote: > Thirdly, Computers are very good at exhaustively searching multidimensional > spaces.
How long do you think it will take your computer to exhaustively search the space of possible input values to a 2-integer addition function?
Do you think it can finish before the Earth gets engulfed by the Sun?
Regards
Antoine.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org <mailto:Python-ideas@python.org> https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/