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

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Numbers/multprec_integer_numbers.ads, Revision 1.1.1.1

1.1       maekawa     1: with Multprec_Natural_Numbers;           use Multprec_Natural_Numbers;
                      2:
                      3: package Multprec_Integer_Numbers is
                      4:
                      5: -- DESCRIPTION :
                      6: --   This package allows to manipulate integer numbers of arbitrary length.
                      7: --   The operations are such that this is a faithful representation of the
                      8: --   integers as an Euclidean domain.
                      9:
                     10: -- DATA STRUCTURES :
                     11:
                     12:   type Integer_Number is private;
                     13:
                     14: -- CREATORS :
                     15:
                     16:   function Create ( n : Natural_Number ) return Integer_Number;
                     17:   function Create ( n : Array_of_Naturals ) return Integer_Number;
                     18:   function Create ( i : integer ) return Integer_Number;
                     19:
                     20:   -- DESCRIPTION :
                     21:   --   Returns the representation as a natural number.
                     22:
                     23:   function Convert ( n : Natural_Number ) return Integer_Number;
                     24:
                     25:   -- DESCRIPTION :
                     26:   --   This operation has the same effect as create, except that
                     27:   --   n and i := Convert(n), share the same number: if n changes
                     28:   --   after conversion, i will change as well, and vice versa.
                     29:   --   This operation can be useful for integer/natural arithmetic.
                     30:
                     31:   function Create ( i : Integer_Number ) return integer;
                     32:
                     33:   -- DESCRIPTION :
                     34:   --   Returns the representation of i as a standard integer.
                     35:
                     36:   -- REQUIRED : i < Natural_Numbers.Basis.
                     37:
                     38: -- SELECTORS :
                     39:
                     40:   function Empty ( i : Integer_Number ) return boolean;
                     41:
                     42:   -- DESCRIPTION :
                     43:   --   Returns true if the number has not been created yet, or when it has
                     44:   --   been destroyed by the operation Clear; otherwise false is returned.
                     45:   --   An empty number is considered as zero.
                     46:
                     47:   function Size ( i : Integer_Number ) return natural;
                     48:
                     49:   -- DESCRIPTION :
                     50:   --   Returns the index of the last entry in the coefficient representation.
                     51:
                     52:   function Coefficient ( i : Integer_Number; k : natural ) return natural;
                     53:
                     54:   -- DESCRIPTION :
                     55:   --   Returns the kth component in the coefficient representation of i.
                     56:
                     57:   function Coefficients ( i : Integer_Number ) return Array_of_Naturals;
                     58:
                     59:   -- DESCRIPTION :
                     60:   --   Returns the coefficient representation of the unsigned integer.
                     61:
                     62:   function Decimal_Places ( i : Integer_Number ) return natural;
                     63:
                     64:   -- DESCRIPTION :
                     65:   --   Returns the number of decimal places of i.
                     66:   --   The number of decimal places of 0 is 0.
                     67:
                     68:   function Positive ( i : Integer_Number ) return boolean;
                     69:   function Negative ( i : Integer_Number ) return boolean;
                     70:
                     71:   -- DESCRIPTION :
                     72:   --   If i > 0, then Positive(i) and not Negative(i).
                     73:   --   If i < 0, then not Positive(i) and Negative(i).
                     74:   --   For i = 0, sign switching by Min(i) can give either +0 or -0.
                     75:
                     76:   function Sign ( i : Integer_Number ) return integer;
                     77:
                     78:   -- DESCRIPTION :
                     79:   --   Returns +1,-1, or 0, depending whether i > 0, i < 0, or i = 0.
                     80:
                     81:   function Unsigned ( i : Integer_Number ) return Natural_Number;
                     82:
                     83:   -- DESCRIPTION :
                     84:   --   Returns the unsigned integer number.
                     85:   --   Note that this is a pointer with data sharing!
                     86:
                     87: -- COMPARISON AND COPYING :
                     88:
                     89:   function Equal ( i1 : Integer_Number; i2 : integer ) return boolean;
                     90:   function Equal ( i1,i2 : Integer_Number ) return boolean;
                     91:
                     92:   -- DESCRIPTION :
                     93:   --   Returns true when both numbers i1 and i2 are equal, false otherwise.
                     94:
                     95:   function "<" ( i1 : Integer_Number; i2 : integer ) return boolean;
                     96:   function "<" ( i1 : integer; i2 : Integer_Number ) return boolean;
                     97:   function "<" ( i1,i2 : Integer_Number ) return boolean;
                     98:
                     99:   -- DESCRIPTION :
                    100:   --   Returns true if i1 < i2, false otherwise.
                    101:
                    102:   function ">" ( i1 : Integer_Number; i2 : integer ) return boolean;
                    103:   function ">" ( i1 : integer; i2 : Integer_Number ) return boolean;
                    104:   function ">" ( i1,i2 : Integer_Number ) return boolean;
                    105:
                    106:   -- DESCRIPTION :
                    107:   --   Returns true if i1 > i2, false otherwise.
                    108:
                    109:   procedure Copy ( i1 : in integer; i2 : in out Integer_Number );
                    110:   procedure Copy ( i1 : in Integer_Number; i2 : in out Integer_Number );
                    111:
                    112:   -- DESCRIPTION :
                    113:   --   Clears i2 and makes a copy of i1 to be equal to i2.
                    114:   --   Note that i2 := i1 leads to data sharing.
                    115:
                    116: -- ARITHMETIC OPERATIONS as functions (no data sharing) :
                    117:
                    118:   function "+" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
                    119:   function "+" ( i1 : integer; i2 : Integer_Number ) return Integer_Number;
                    120:   function "+" ( i1,i2 : Integer_Number ) return Integer_Number;
                    121:
                    122:   function "+" ( i : Integer_Number ) return Integer_Number;  -- copies i
                    123:   function "-" ( i : Integer_Number ) return Integer_Number;
                    124:
                    125:   function "-" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
                    126:   function "-" ( i1 : integer; i2 : Integer_Number ) return Integer_Number;
                    127:   function "-" ( i1,i2 : Integer_Number ) return Integer_Number;
                    128:
                    129:   function "*" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
                    130:   function "*" ( i1 : integer; i2 : Integer_Number ) return Integer_Number;
                    131:   function "*" ( i1,i2 : Integer_Number ) return Integer_Number;
                    132:
                    133:   function "**" ( i : Integer_Number; n : natural ) return Integer_Number;
                    134:   function "**" ( i : integer; n : Natural_Number ) return Integer_Number;
                    135:   function "**" ( i : Integer_Number; n : Natural_Number )
                    136:                 return Integer_Number;
                    137:
                    138:   function "/" ( i1 : Integer_Number; i2 : integer ) return Integer_Number;
                    139:   function "/" ( i1 : integer; i2 : Integer_Number ) return integer;
                    140:   function "/" ( i1,i2 : Integer_Number ) return Integer_Number;
                    141:
                    142:   function Rmd ( i1 : Integer_Number; i2 : integer ) return integer;
                    143:   function Rmd ( i1 : integer; i2 : Integer_Number ) return integer;
                    144:   function Rmd ( i1,i2 : Integer_Number ) return Integer_Number;
                    145:
                    146: -- ARITHMETIC OPERATIONS as procedures for memory management :
                    147:
                    148:   procedure Add ( i1 : in out Integer_Number; i2 : in integer );    -- "+"
                    149:   procedure Add ( i1 : in out Integer_Number; i2 : in Integer_Number );
                    150:
                    151:   procedure Min ( i : in out Integer_Number );
                    152:
                    153:   procedure Sub ( i1 : in out Integer_Number; i2 : in integer );    -- "-"
                    154:   procedure Sub ( i1 : in out Integer_Number; i2 : in Integer_Number );
                    155:
                    156:   procedure Mul ( i1 : in out Integer_Number; i2 : in integer );    -- "*"
                    157:   procedure Mul ( i1 : in out Integer_Number; i2 : in Integer_Number );
                    158:
                    159:   procedure Rmd ( i1 : in out Integer_Number; i2 : in integer );
                    160:   procedure Rmd ( i1 : in out Integer_Number; i2 : in Integer_Number );
                    161:
                    162:   procedure Div ( i1 : in out Integer_Number; i2 : in integer );    -- "/"
                    163:   procedure Div ( i1 : in out Integer_Number; i2 : in Integer_Number );
                    164:
                    165:   procedure Div ( i1 : in Integer_Number; i2 : in integer;  -- i1 = i2*q+r
                    166:                   q : out Integer_Number; r : out integer );
                    167:   procedure Div ( i1 : in out Integer_Number; i2 : in integer;
                    168:                   r : out integer );
                    169:   procedure Div ( i1,i2 : in Integer_Number; q,r : out Integer_Number );
                    170:   procedure Div ( i1 : in out Integer_Number; i2 : in Integer_Number;
                    171:                   r : out Integer_Number );
                    172:
                    173: -- DESTRUCTOR :
                    174:
                    175:   procedure Clear ( i : in out Integer_Number );
                    176:
                    177:   -- DESCRIPTION :
                    178:   --   Deallocation of the memory space.  Empty(i) is true on return.
                    179:
                    180: private
                    181:
                    182:   type Integer_Number_Rep;
                    183:   type Integer_Number is access Integer_Number_Rep;
                    184:
                    185: end Multprec_Integer_Numbers;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>