ADA - Ada.Numerics.Big_Numbers.Big_Integer has upper limit?

  • Thread starter Thread starter MFerguson
  • Start date Start date
  • Tags Tags
    Limit
AI Thread Summary
The discussion centers on the Big_Integer library in the 202X version of Ada, which is touted as an "arbitrary precision library" but has a default limit of 300 digits for calculations. Users express confusion regarding this limitation, questioning whether it can be modified or eliminated. The conversation also touches on the distinction between Big Integers and arbitrary precision reals, highlighting that a limit is necessary for certain calculations, such as division. Additionally, there is clarification regarding the terminology, emphasizing that ADA refers to an acronym, while Ada is the name of the programming language named after Ada Lovelace, a pioneer in computing.
MFerguson
Messages
1
Reaction score
0
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.

I was under the impression that this library would be able to infinitely calculate numbers of any length, but there is clearly a default limit of 300 digits.

Is there any way to get rid of this problem?

Here is some example code:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
with Ada.Numerics.Big_Numbers.Big_Integers;
use Ada.Numerics.Big_Numbers.Big_Integers;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;

procedure Test is
package Time_IO is new Fixed_IO(Duration);
start_time, end_time : Ada.Real_Time.Time;
elapsed_seconds : Ada.Real_Time.Time_Span;
solution : Unbounded_String;

rop : Big_Integer;
sum : Big_Integer := 0;

begin
start_time := Ada.Real_Time.Clock;

for i in 1..700 loop
rop := To_Big_Integer(i) ** Natural(i);
sum := sum + rop;
end loop;
solution := To_Unbounded_String(sum'Image); end_time := Ada.Real_Time.Clock;
elapsed_seconds := end_time - start_time;
Put("Solution: " & solution'Image); New_Line; New_Line;
Put("Program completed in ");
Time_IO.Put(To_Duration(elapsed_seconds), Fore => 0, Aft => 3);
Put(" seconds");
end BigTest;
 
Technology news on Phys.org
Do you want Big Integers or arbitrary precision reals? If the latter then there must be a (modifiable) limit otherwise the calculation of e.g. 1/10 would not terminate.
 
Last edited:
MFerguson said:
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.

I was under the impression that this library would be able to infinitely calculate numbers of any length, but there is clearly a default limit of 300 digits.

Is there any way to get rid of this problem?

Here is some example code:
 
ADA is not the Ada programming language. The former is an acronym, a three letter one at that. The latter, Ada, is the name of the programming language, named after Ada Lovelace, credited by many as being one of, or the first programmer. She worked with Charles Babbage in the mid Nineteenth Century in designing an analytic machine, later evolved into modern digital computers.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.

Similar threads

Replies
49
Views
11K
Back
Top