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.
next prev parent 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