------------------------------------------------------------------------------ -- -- -- GNAT RUN-TIME COMPONENTS -- -- -- -- ADA.NUMERICS.BIG_NUMBERS.BIG_REALS -- -- -- -- S p e c -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. In accordance with the copyright of that document, you can freely -- -- copy and modify this specification, provided that if you redistribute a -- -- modified version, any changes that you have made are clearly indicated. -- -- -- ------------------------------------------------------------------------------ with Ada.Numerics.Big_Numbers.Big_Integers; with Ada.Streams; -- Note that some Ada 2020 aspects are commented out since they are not -- supported yet. package Ada.Numerics.Big_Numbers.Big_Reals with Preelaborate -- Nonblocking, Global => in out synchronized Big_Reals is type Big_Real is private; -- with Real_Literal => From_String, -- Put_Image => Put_Image; function Is_Valid (Arg : Big_Real) return Boolean with Convention => Intrinsic; function "/" (Num, Den : Big_Integers.Big_Integer) return Big_Real; -- with Pre => (if Big_Integers."=" (Den, Big_Integers.To_Big_Integer (0)) -- then raise Constraint_Error); function Numerator (Arg : Big_Real) return Big_Integers.Big_Integer; function Denominator (Arg : Big_Real) return Big_Integers.Big_Positive with Post => (Arg = To_Real (0)) or else (Big_Integers."=" (Big_Integers.Greatest_Common_Divisor (Numerator (Arg), Denominator'Result), Big_Integers.To_Big_Integer (1))); function To_Big_Real (Arg : Big_Integers.Big_Integer) return Big_Real is (Arg / Big_Integers.To_Big_Integer (1)); function To_Real (Arg : Integer) return Big_Real is (Big_Integers.To_Big_Integer (Arg) / Big_Integers.To_Big_Integer (1)); function "=" (L, R : Big_Real) return Boolean; function "<" (L, R : Big_Real) return Boolean; function "<=" (L, R : Big_Real) return Boolean; function ">" (L, R : Big_Real) return Boolean; function ">=" (L, R : Big_Real) return Boolean; function In_Range (Arg, Low, High : Big_Real) return Boolean is (Low <= Arg and then Arg <= High); generic type Num is digits <>; package Float_Conversions is function To_Big_Real (Arg : Num) return Big_Real; function From_Big_Real (Arg : Big_Real) return Num with Pre => In_Range (Arg, Low => To_Big_Real (Num'First), High => To_Big_Real (Num'Last)) or else (raise Constraint_Error); end Float_Conversions; generic type Num is delta <>; package Fixed_Conversions is function To_Big_Real (Arg : Num) return Big_Real; function From_Big_Real (Arg : Big_Real) return Num with Pre => In_Range (Arg, Low => To_Big_Real (Num'First), High => To_Big_Real (Num'Last)) or else (raise Constraint_Error); end Fixed_Conversions; function To_String (Arg : Big_Real; Fore : Field := 2; Aft : Field := 3; Exp : Field := 0) return String with Post => To_String'Result'First = 1; function From_String (Arg : String) return Big_Real; function To_Quotient_String (Arg : Big_Real) return String is (Big_Integers.To_String (Numerator (Arg)) & " / " & Big_Integers.To_String (Denominator (Arg))); function From_Quotient_String (Arg : String) return Big_Real; procedure Put_Image (Stream : not null access Ada.Streams.Root_Stream_Type'Class; Arg : Big_Real); function "+" (L : Big_Real) return Big_Real; function "-" (L : Big_Real) return Big_Real; function "abs" (L : Big_Real) return Big_Real; function "+" (L, R : Big_Real) return Big_Real; function "-" (L, R : Big_Real) return Big_Real; function "*" (L, R : Big_Real) return Big_Real; function "/" (L, R : Big_Real) return Big_Real; function "**" (L : Big_Real; R : Integer) return Big_Real; function Min (L, R : Big_Real) return Big_Real; function Max (L, R : Big_Real) return Big_Real; private type Big_Real is record Num, Den : Big_Integers.Big_Integer; end record; end Ada.Numerics.Big_Numbers.Big_Reals;