comp.lang.ada
 help / color / mirror / Atom feed
From: Michael Ferguson <michaelblakeferguson@gmail.com>
Subject: Re: Ada.Numerics.Big_Numbers.Big_Integer has a limit of 300 digits?
Date: Wed, 22 Dec 2021 10:02:41 -0800 (PST)	[thread overview]
Message-ID: <41879a68-95cf-41e7-a582-4358a39f9d47n@googlegroups.com> (raw)
In-Reply-To: <j2h6nrFc4ppU1@mid.individual.net>

On Wednesday, December 22, 2021 at 11:48:46 AM UTC-6, Niklas Holsti wrote:
> On 2021-12-22 19:27, Michael Ferguson wrote: 
> > On Wednesday, December 22, 2021 at 11:02:03 AM UTC-6, Luke A. Guest wrote: 
> >> On 22/12/2021 05:57, Michael Ferguson wrote: 
> >>> I just started using the Big_Integer library that is a part of the 202X version of ADA. 
> >>> 
> >>> It is repeatedly described as an "arbitrary precision library" 
> >>> that has user defined implementation.
> Surely not "user defined"? Possibly "implementation defined".
> >>> I was under the impression that this library would be able to 
> >>> infinitely calculate numbers of any length,
> I have the same impression (up to Storage_Error, of course).
> >> but there is clearly a default limit of 300 digits. 
> >> What are you doing that requires that number of digits? 
> > 
> > I am working on ProjectEuler.net problem number 48. 
> > 
> > The questions asks you to sum the numbers n^n for (2 <= n <= 1000) 
> > and determine what the last ten digits of this number are. 
> > 
> > Obviously, this is quite a trivial problem when using any arbitrary 
> > precision library. 
> > 
> > I had incorrectly determined that 700^700 had 300 digits, in fact 
> > 700^700 = 3.7E1991. 
> > 
> > However, my code strictly breaks when the loop range is set to 683, 
> > which 683^683 = 8.12E1935.
> How does it break? Some exception, or something else? 
> 
> Mark Lorenzen suggested in an earlier post that the limit might be in 
> the Big_Integer'Image function. The package 
> Ada.Numerics.Big_Numbers.Big_Integers has some other output operations 
> that you could try: 
> 
> function To_String (Arg : Valid_Big_Integer; ...) return String; 
> 
> procedure Put_Image (Buffer : ... ; Arg: in Valid_Big_Integer); 
> 
> Of course those might be internally linked to the 'Image function and 
> have the same possible limitation.

Not 100% sure what modular types are but I did try to do something like the following

subtype VeryBigInteger is Big_Integer range 0 .. 10E10000;

which gave "error: incorrect constraint for this kind of type"

Niklas also gave me an epiphany as the exact error my program gives for the upper limit is

raised STORAGE_ERROR : Ada.Numerics.Big_Numbers.Big_Integers.Bignums.Normalize: big integer limit exceeded

I had thought that since the end of this error said big integer limit exceeded it was a problem with the library, but now I'm starting to think I need to get GNAT to allocated more memory for the program.

  reply	other threads:[~2021-12-22 18:02 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-22  5:57 Ada.Numerics.Big_Numbers.Big_Integer has a limit of 300 digits? Michael Ferguson
2021-12-22  8:25 ` Mark Lorenzen
2021-12-22 11:14 ` AdaMagica
2021-12-22 11:32   ` AdaMagica
2021-12-22 16:04   ` AdaMagica
2021-12-22 17:37     ` Niklas Holsti
2021-12-22 20:34   ` Simon Wright
2021-12-22 17:01 ` Luke A. Guest
2021-12-22 17:27   ` Michael Ferguson
2021-12-22 17:43     ` Ben Bacarisse
2021-12-22 17:48     ` Niklas Holsti
2021-12-22 18:02       ` Michael Ferguson [this message]
2021-12-22 19:05         ` Niklas Holsti
2021-12-23  8:31           ` Luke A. Guest
2021-12-23  8:54             ` Dmitry A. Kazakov
2021-12-23 11:41           ` AdaMagica
2021-12-23 12:18             ` Niklas Holsti
2021-12-23 14:01               ` Ben Bacarisse
2021-12-22 19:26     ` Mark Lorenzen
2021-12-22 20:43       ` Niklas Holsti
2021-12-22 20:31     ` Paul Rubin
2021-12-22 20:39     ` Paul Rubin
2021-12-23 15:48 ` Jeffrey R.Carter
2021-12-24  9:09   ` AdaMagica
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox