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

  • Thread starter Thread starter MFerguson
  • Start date Start date
  • Tags Tags
    Limit
Click For Summary
SUMMARY

The Big_Integer library included in the 202X version of Ada is designed for arbitrary precision arithmetic but has a default limit of 300 digits. Users have expressed confusion regarding this limitation, as they expected the library to handle numbers of any length. To address this issue, it is essential to understand the distinction between Big Integers and arbitrary precision reals, as the latter requires a modifiable limit for calculations to terminate. Users seeking to extend the digit limit should explore the library's configuration options.

PREREQUISITES
  • Understanding of Ada programming language
  • Familiarity with the Ada.Numerics.Big_Numbers package
  • Knowledge of arbitrary precision arithmetic concepts
  • Basic programming skills in Ada
NEXT STEPS
  • Investigate the configuration options for the Big_Integer library in Ada 202X
  • Learn about the differences between Big Integers and arbitrary precision reals
  • Explore performance implications of using large numbers in Ada
  • Review documentation on user-defined implementations in Ada.Numerics
USEFUL FOR

Software developers, particularly those working with numerical computations in Ada, and anyone interested in understanding the limitations and capabilities of the Big_Integer library for high-precision arithmetic.

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:
  • Like
Likes   Reactions: sysprog
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.
 

Similar threads

  • · Replies 49 ·
2
Replies
49
Views
12K