with Abstract_Ring;
with Abstract_Ring.Field;
generic
with package Ring is new Abstract_Ring(<>);
with package Field is new Ring.Field(<>);
package Generic_Complex_Numbers is
-- DESCRIPTION :
-- Offers a Cartesian view on the complex numbers, where the type of the
-- reals is left for instantiation.
use Ring; use Field;
type Complex_Number is private;
-- CREATORS :
function Create ( i : integer ) return Complex_Number;
function Create ( f : number ) return Complex_Number;
function Create ( re,im : number ) return Complex_Number;
function Conjugate ( c : Complex_Number ) return Complex_Number;
-- SELECTORS :
function REAL_PART ( x : Complex_Number ) return number;
function IMAG_PART ( x : Complex_Number ) return number;
function AbsVal ( x : Complex_Number ) return number; -- x=a+bi, |x|=|a|+|b|
function AbsVal ( x : Complex_Number ) return Complex_Number;
-- COMPARISON/COPYING :
function Equal ( x,y : Complex_Number ) return boolean;
procedure Copy ( x : in Complex_Number; y : in out Complex_Number );
function "<" ( x,y : Complex_Number ) return boolean; -- return |x|<|y|
function ">" ( x,y : Complex_Number ) return boolean; -- return |x|>|y|
-- ARITHMETHIC OPERATIONS AS FUNCTIONS :
function "+" ( x : Complex_Number; y : number ) return Complex_Number;
function "-" ( x : Complex_Number; y : number ) return Complex_Number;
function "*" ( x : Complex_Number; y : number ) return Complex_Number;
function "/" ( x : Complex_Number; y : number ) return Complex_Number;
function "+" ( x : number; y : Complex_Number ) return Complex_Number;
function "-" ( x : number; y : Complex_Number ) return Complex_Number;
function "*" ( x : number; y : Complex_Number ) return Complex_Number;
function "/" ( x : number; y : Complex_Number ) return Complex_Number;
function "+" ( x,y : Complex_Number ) return Complex_Number;
function "+" ( x : Complex_Number ) return Complex_Number; -- copies x
function "-" ( x,y : Complex_Number ) return Complex_Number;
function "-" ( x : Complex_Number ) return Complex_Number;
function "*" ( x,y : Complex_Number ) return Complex_Number;
function "/" ( x,y : Complex_Number ) return Complex_Number;
function "**" ( x : Complex_Number; m : integer ) return Complex_Number;
-- ARITHMETIC OPERATIONS AS PROCEDURES :
procedure Add ( x : in out Complex_Number; y : in number );
procedure Sub ( x : in out Complex_Number; y : in number );
procedure Mul ( x : in out Complex_Number; y : in number );
procedure Div ( x : in out Complex_Number; y : in number );
procedure Add ( x : in out Complex_Number; y : in Complex_Number );
procedure Sub ( x : in out Complex_Number; y : in Complex_Number );
procedure Min ( x : in out Complex_Number );
procedure Mul ( x : in out Complex_Number; y : in Complex_Number );
procedure Div ( x : in out Complex_Number; y : in Complex_Number );
-- DESTRUCTOR :
procedure Clear ( x : in out Complex_Number );
private
type Complex_Number is
record
RE,IM : number;
end record;
end Generic_Complex_Numbers;