[BACK]Return to multprec_natural_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_natural_numbers.ads, Revision 1.1.1.1

1.1       maekawa     1: package Multprec_Natural_Numbers is
                      2:
                      3: -- DESCRIPTION :
                      4: --   This package allows to manipulate natural numbers of arbitrary length.
                      5:
                      6: -- DATA STRUCTURES :
                      7:
                      8:   type Array_of_Naturals is array ( natural range <> ) of natural;
                      9:   type Natural_Number is private;
                     10:
                     11: -- CREATORS :
                     12:
                     13:   function Create ( n : natural ) return Array_of_Naturals;
                     14:
                     15:   -- DESCRIPTION :
                     16:   --   Returns the representation of the natural number as coefficient vector.
                     17:
                     18:   function Create ( n : natural ) return Natural_Number;
                     19:
                     20:   -- DESCRIPTION :
                     21:   --   Returns the representation of n as a natural number.
                     22:
                     23:   function Create ( n : Array_of_Naturals ) return Natural_Number;
                     24:
                     25:   -- DESCRIPTION :
                     26:   --   Creates a number from the coefficients in n.
                     27:
                     28:   -- REQUIRED : n'range = 0..n'last and n(i) < Base, for i in n'range.
                     29:
                     30:   function Create ( n : Natural_Number ) return natural;
                     31:
                     32:   -- DESCRIPTION :
                     33:   --   Returns the representation of n as a standard natural.
                     34:
                     35:   -- REQUIRED : n < Base.
                     36:
                     37: -- SELECTORS :
                     38:
                     39:   function Base return natural;
                     40:
                     41:   -- DESCRIPTION :
                     42:   --   Returns the base of the number representation.
                     43:
                     44:   function Exponent return natural;
                     45:
                     46:   -- DESCRIPTION :
                     47:   --   Returns the exponent: the number of decimal places in the base.
                     48:
                     49:   function Empty ( n : Natural_Number ) return boolean;
                     50:
                     51:   -- DESCRIPTION :
                     52:   --   Returns true if the number has not been created yet, or when it has
                     53:   --   been destroyed by the operation Clear; otherwise false is returned.
                     54:   --   An empty number is considered as zero.
                     55:
                     56:   function Size ( n : Natural_Number ) return natural;
                     57:
                     58:   -- DESCRIPTION :
                     59:   --   Returns the index of the last entry in the coefficient representation.
                     60:
                     61:   function Decimal_Places ( n : natural ) return natural;
                     62:
                     63:   -- DESCRIPTION :
                     64:   --   Returns the number of decimal places n occupies, Decimal_Places(0) = 0.
                     65:
                     66:   function Decimal_Places ( n : Natural_Number ) return natural;
                     67:
                     68:   -- DESCRIPTION :
                     69:   --   Returns the number of decimal places n occupies, Decimal_Places(0) = 0.
                     70:   --   Since n can be arbitrarily large, also the number of return should
                     71:   --   have no constraints on its size.  However, the current implementation
                     72:   --   would not support the manipulation of numbers whose size causes this
                     73:   --   function to crash.
                     74:
                     75:   function Coefficient ( n : Natural_Number; i : natural ) return natural;
                     76:
                     77:   -- DESCRIPTION :
                     78:   --   Returns the ith entry in the coefficient representation.
                     79:
                     80:   function Coefficients ( n : Natural_Number ) return Array_of_Naturals;
                     81:
                     82:   -- DESCRIPTION :
                     83:   --   Returns the coefficient representation of n, of range 0..Size(n).
                     84:   --   The number n equals then the sum of Coefficient(n,i)*Base**i,
                     85:   --   for i in 0..Size(n).
                     86:
                     87: -- COMPARISON AND COPYING :
                     88:
                     89:   function Equal ( n1 : Natural_Number; n2 : natural ) return boolean;
                     90:   function Equal ( n1,n2 : Natural_Number ) return boolean;
                     91:
                     92:   -- DESCRIPTION :
                     93:   --   Returns true when both numbers n1 and n2 are equal, false otherwise.
                     94:
                     95:   function "<" ( n1 : Natural_Number; n2 : natural ) return boolean;
                     96:   function "<" ( n1 : natural; n2 : Natural_Number ) return boolean;
                     97:   function "<" ( n1,n2 : Natural_Number ) return boolean;
                     98:
                     99:   -- DESCRIPTION :
                    100:   --   Returns true if n1 < n2, false otherwise.
                    101:
                    102:   function ">" ( n1 : Natural_Number; n2 : natural ) return boolean;
                    103:   function ">" ( n1 : natural; n2 : Natural_Number ) return boolean;
                    104:   function ">" ( n1,n2 : Natural_Number ) return boolean;
                    105:
                    106:   -- DESCRIPTION :
                    107:   --   Returns true if n1 > n2, false otherwise.
                    108:
                    109:   procedure Copy ( n1 : in natural; n2 : in out Natural_Number );
                    110:   procedure Copy ( n1 : in Natural_Number; n2 : in out Natural_Number );
                    111:
                    112:   -- DESCRIPTION :
                    113:   --   Clears n2 and makes a copy of n1 to be equal to n2.
                    114:   --   Note that n2 := n1 leads to data sharing.
                    115:
                    116: -- ARITHMETIC OPERATIONS as functions (no data sharing) :
                    117: --   Note that n1 >= n2 is required for subtraction, and n2 /= 0 for division.
                    118: --   The unary "-" operations have been added to make it ring-like.
                    119:
                    120:   function "+" ( n1 : Natural_Number; n2 : natural ) return Natural_Number;
                    121:   function "+" ( n1 : natural; n2 : Natural_Number ) return Natural_Number;
                    122:   function "+" ( n1,n2 : Natural_Number ) return Natural_Number;
                    123:
                    124:   function "-" ( n1 : Natural_Number; n2 : natural ) return Natural_Number;
                    125:   function "-" ( n1 : natural; n2 : Natural_Number ) return Natural_Number;
                    126:   function "-" ( n1,n2 : Natural_Number ) return Natural_Number;
                    127:
                    128:   function "+" ( n : Natural_Number ) return Natural_Number;   -- copies n
                    129:   function "-" ( n : Natural_Number ) return Natural_Number;   -- copies n
                    130:
                    131:   function "*" ( n1 : Natural_Number; n2 : natural ) return Natural_Number;
                    132:   function "*" ( n1 : natural; n2 : Natural_Number ) return Natural_Number;
                    133:   function "*" ( n1,n2 : Natural_Number ) return Natural_Number;
                    134:
                    135:   function "**" ( n1 : Natural_Number; n2 : natural ) return Natural_Number;
                    136:   function "**" ( n1 : natural; n2 : Natural_Number ) return Natural_Number;
                    137:   function "**" ( n1,n2 : Natural_Number ) return Natural_Number;
                    138:
                    139:   function "/" ( n1 : Natural_Number; n2 : natural ) return Natural_Number;
                    140:   function "/" ( n1 : natural; n2 : Natural_Number ) return natural;
                    141:   function "/" ( n1,n2 : Natural_Number ) return Natural_Number;
                    142:
                    143:   function Rmd ( n1 : Natural_Number; n2 : natural ) return natural;
                    144:   function Rmd ( n1 : natural; n2 : Natural_Number ) return natural;
                    145:   function Rmd ( n1,n2 : Natural_Number ) return Natural_Number;
                    146:
                    147: -- ARITHMETIC OPERATIONS as procedures for memory management :
                    148:
                    149:   procedure Add ( n1 : in out Natural_Number; n2 : in natural );    -- "+"
                    150:   procedure Add ( n1 : in out Natural_Number; n2 : in Natural_Number );
                    151:
                    152:   procedure Sub ( n1 : in out Natural_Number; n2 : in natural );    -- "-"
                    153:   procedure Sub ( n1 : in out Natural_Number; n2 : in Natural_Number );
                    154:   procedure Min ( n : in out Natural_Number );
                    155:
                    156:   procedure Mul ( n1 : in out Natural_Number; n2 : in natural );    -- "*"
                    157:   procedure Mul ( n1 : in out Natural_Number; n2 : in Natural_Number );
                    158:
                    159:   procedure Div ( n1 : in out Natural_Number; n2 : in natural );    -- "/"
                    160:   procedure Div ( n1 : in out Natural_Number; n2 : in Natural_Number );
                    161:
                    162:   procedure Div ( n1 : in Natural_Number; n2 : in natural;  -- n1 = n2*q+r
                    163:                   q : out Natural_Number; r : out natural );
                    164:   procedure Div ( n1 : in out Natural_Number; n2 : in natural;
                    165:                   r : out natural );
                    166:   procedure Div ( n1,n2 : in Natural_Number; q,r : out Natural_Number );
                    167:   procedure Div ( n1 : in out Natural_Number; n2 : in Natural_Number;
                    168:                   r : out Natural_Number );
                    169:
                    170: -- DESTRUCTOR :
                    171:
                    172:   procedure Clear ( n : in out Natural_Number );
                    173:
                    174:   -- DESCRIPTION :
                    175:   --   Deallocation of the memory space.  Empty(n) is true on return.
                    176:
                    177: private
                    178:
                    179:   type Natural_Number_Rep;
                    180:   type Natural_Number is access Natural_Number_Rep;
                    181:
                    182: end Multprec_Natural_Numbers;

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