[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     ! 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>