Mike Wilson <wmwilson1 / go.com> writes:

> Just fooling around some, I ran this
> 
> irb(main):001:0> 1020939**28329282

 ...

> So I'm curious why ruby seems to have no limit on the stupidity of
> the user ;).  Perl is known to hand the user a good
> (tree_branch_height - (user_height + 1)) worth of rope, but still
> recognizes that this is a fruitless pursuit.

Just as a matter of interest, I played with this a bit:


  base = 1020939
  n = 1
  number = base

  loop do
    printf "%6d: %6d %f\n", n, number.size, number.size.to_f/n
    n += 1
    number *= base
  end

I ran this and the size of the representation of 1020939^n seems to to
be pretty consistently 2.4955*n. So, I'm guessing that when
n=28329282, the number would be stored in roughly 70Mb, which isn't
exceptionally scary.

Then I played around with timings. As you'd expect, the
multiplications are greater than O(n^2). Here are some timings from my
box calculating 1020939^n for various n:
    n              time
    10,000          1.18
    20,000          4.72
    40,000         19.45
    80,000         80.12
   100,000        124.03
   200,000        582

I'm guessing that 1020939**28329282 would take something like
12,000,000 seconds to compute, roughly 140 days.

So, it seems like on a sensible-sized box, this is actually a viable
calculation for Ruby to perform (if you really, really want to know
the answer and don't mind waiting).

You just didn't wait long enough...  ;-)


Dave




Footnotes: 
 I'm no mathematician, though, so I'm guessing here. This could be
way off as the numbers start to climb.