[BACK]Return to multprec_integer_numbers.ads CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Numbers

File: [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Numbers / multprec_integer_numbers.ads (download)

Revision 1.1.1.1 (vendor branch), Sun Oct 29 17:45:26 2000 UTC (23 years, 7 months ago) by maekawa
Branch: PHC, MAIN
CVS Tags: v2, maekawa-ipv6, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, HEAD
Changes since 1.1: +0 -0 lines

Import the second public release of PHCpack.

OKed by Jan Verschelde.

with Multprec_Natural_Numbers;           use Multprec_Natural_Numbers;

package Multprec_Integer_Numbers is

-- DESCRIPTION :
--   This package allows to manipulate integer numbers of arbitrary length.
--   The operations are such that this is a faithful representation of the
--   integers as an Euclidean domain.

-- DATA STRUCTURES :

  type Integer_Number is private;

-- CREATORS :

  function Create ( n : Natural_Number ) return Integer_Number;
  function Create ( n : Array_of_Naturals ) return Integer_Number;
  function Create ( i : integer ) return Integer_Number;

  -- DESCRIPTION :
  --   Returns the representation as a natural number.

  function Convert ( n : Natural_Number ) return Integer_Number;

  -- DESCRIPTION :
  --   This operation has the same effect as create, except that
  --   n and i := Convert(n), share the same number: if n changes
  --   after conversion, i will change as well, and vice versa.
  --   This operation can be useful for integer/natural arithmetic.

  function Create ( i : Integer_Number ) return integer;

  -- DESCRIPTION :
  --   Returns the representation of i as a standard integer.

  -- REQUIRED : i < Natural_Numbers.Basis.

-- SELECTORS :

  function Empty ( i : Integer_Number ) return boolean;

  -- DESCRIPTION :
  --   Returns true if the number has not been created yet, or when it has
  --   been destroyed by the operation Clear; otherwise false is returned.
  --   An empty number is considered as zero.

  function Size ( i : Integer_Number ) return natural;

  -- DESCRIPTION :
  --   Returns the index of the last entry in the coefficient representation.

  function Coefficient ( i : Integer_Number; k : natural ) return natural;

  -- DESCRIPTION :
  --   Returns the kth component in the coefficient representation of i.

  function Coefficients ( i : Integer_Number ) return Array_of_Naturals;

  -- DESCRIPTION :
  --   Returns the coefficient representation of the unsigned integer.

  function Decimal_Places ( i : Integer_Number ) return natural;

  -- DESCRIPTION :
  --   Returns the number of decimal places of i.
  --   The number of decimal places of 0 is 0.

  function Positive ( i : Integer_Number ) return boolean;
  function Negative ( i : Integer_Number ) return boolean;

  -- DESCRIPTION :
  --   If i > 0, then Positive(i) and not Negative(i).
  --   If i < 0, then not Positive(i) and Negative(i).
  --   For i = 0, sign switching by Min(i) can give either +0 or -0.

  function Sign ( i : Integer_Number ) return integer;

  -- DESCRIPTION :
  --   Returns +1,-1, or 0, depending whether i > 0, i < 0, or i = 0.

  function Unsigned ( i : Integer_Number ) return Natural_Number;

  -- DESCRIPTION :
  --   Returns the unsigned integer number.
  --   Note that this is a pointer with data sharing!

-- COMPARISON AND COPYING :

  function Equal ( i1 : Integer_Number; i2 : integer ) return boolean;
  function Equal ( i1,i2 : Integer_Number ) return boolean;

  -- DESCRIPTION :
  --   Returns true when both numbers i1 and i2 are equal, false otherwise.

  function "<" ( i1 : Integer_Number; i2 : integer ) return boolean;
  function "<" ( i1 : integer; i2 : Integer_Number ) return boolean;
  function "<" ( i1,i2 : Integer_Number ) return boolean;

  -- DESCRIPTION :
  --   Returns true if i1 < i2, false otherwise.

  function ">" ( i1 : Integer_Number; i2 : integer ) return boolean;
  function ">" ( i1 : integer; i2 : Integer_Number ) return boolean;
  function ">" ( i1,i2 : Integer_Number ) return boolean;

  -- DESCRIPTION :
  --   Returns true if i1 > i2, false otherwise.

  procedure Copy ( i1 : in integer; i2 : in out Integer_Number );
  procedure Copy ( i1 : in Integer_Number; i2 : in out Integer_Number );

  -- DESCRIPTION :
  --   Clears i2 and makes a copy of i1 to be equal to i2.
  --   Note that i2 := i1 leads to data sharing.

-- ARITHMETIC OPERATIONS as functions (no data sharing) :

  function "+" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
  function "+" ( i1 : integer; i2 : Integer_Number ) return Integer_Number;
  function "+" ( i1,i2 : Integer_Number ) return Integer_Number;

  function "+" ( i : Integer_Number ) return Integer_Number;  -- copies i
  function "-" ( i : Integer_Number ) return Integer_Number;

  function "-" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
  function "-" ( i1 : integer; i2 : Integer_Number ) return Integer_Number;
  function "-" ( i1,i2 : Integer_Number ) return Integer_Number;

  function "*" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
  function "*" ( i1 : integer; i2 : Integer_Number ) return Integer_Number;
  function "*" ( i1,i2 : Integer_Number ) return Integer_Number;

  function "**" ( i : Integer_Number; n : natural ) return Integer_Number;
  function "**" ( i : integer; n : Natural_Number ) return Integer_Number;
  function "**" ( i : Integer_Number; n : Natural_Number )
                return Integer_Number;

  function "/" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
  function "/" ( i1 : integer; i2 : Integer_Number ) return integer;
  function "/" ( i1,i2 : Integer_Number ) return Integer_Number;

  function Rmd ( i1 : Integer_Number; i2 : integer ) return integer;
  function Rmd ( i1 : integer; i2 : Integer_Number ) return integer;
  function Rmd ( i1,i2 : Integer_Number ) return Integer_Number;

-- ARITHMETIC OPERATIONS as procedures for memory management :

  procedure Add ( i1 : in out Integer_Number; i2 : in integer );    -- "+"
  procedure Add ( i1 : in out Integer_Number; i2 : in Integer_Number );

  procedure Min ( i : in out Integer_Number );

  procedure Sub ( i1 : in out Integer_Number; i2 : in integer );    -- "-"
  procedure Sub ( i1 : in out Integer_Number; i2 : in Integer_Number );

  procedure Mul ( i1 : in out Integer_Number; i2 : in integer );    -- "*"
  procedure Mul ( i1 : in out Integer_Number; i2 : in Integer_Number );

  procedure Rmd ( i1 : in out Integer_Number; i2 : in integer );
  procedure Rmd ( i1 : in out Integer_Number; i2 : in Integer_Number );

  procedure Div ( i1 : in out Integer_Number; i2 : in integer );    -- "/"
  procedure Div ( i1 : in out Integer_Number; i2 : in Integer_Number );

  procedure Div ( i1 : in Integer_Number; i2 : in integer;  -- i1 = i2*q+r
                  q : out Integer_Number; r : out integer );
  procedure Div ( i1 : in out Integer_Number; i2 : in integer;
                  r : out integer );
  procedure Div ( i1,i2 : in Integer_Number; q,r : out Integer_Number );
  procedure Div ( i1 : in out Integer_Number; i2 : in Integer_Number;
                  r : out Integer_Number );

-- DESTRUCTOR :

  procedure Clear ( i : in out Integer_Number );

  -- DESCRIPTION :
  --   Deallocation of the memory space.  Empty(i) is true on return.

private
 
  type Integer_Number_Rep;
  type Integer_Number is access Integer_Number_Rep;

end Multprec_Integer_Numbers;