From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-2.9 required=3.0 tests=BAYES_00,NICE_REPLY_A autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!reader02.eternal-september.org!news.mixmin.net!news2.arglkargh.de!news.karotte.org!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Niklas Holsti Newsgroups: comp.lang.ada Subject: Re: Ada.Numerics.Big_Numbers.Big_Integer has a limit of 300 digits? Date: Wed, 22 Dec 2021 19:48:42 +0200 Organization: Tidorum Ltd Message-ID: References: <304dcae2-8b20-43ff-8769-32fa06d4dc10n@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net AmV5n6aUJrBAjEl4CgMKLQzI8b9pnD+F47iZ2Vnc7zrd9Tlxa6 Cancel-Lock: sha1:nsDJbcNcI8l/DXnBJ75UW8duAOo= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 In-Reply-To: <304dcae2-8b20-43ff-8769-32fa06d4dc10n@googlegroups.com> Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:63243 List-Id: 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.