File : numerics.ads
with Ada.Text_IO, Ada.Numerics.Generic_Elementary_Functions, Reps;
use Reps, Ada.Text_IO;
pragma Elaborate (Reps);
package Numerics is
pragma Elaborate_Body;
type Numeric is new Rep;
function Scal(R: Rep) return Numeric;
function Scal(K: Integer) return Numeric;
function Approx(N: Numeric) return Rep;
function IsZero(S: Numeric) return Boolean;
procedure SetZero(S: out Numeric);
function Average(S,T: Numeric) return Numeric;
function Disk(R1,R2: Rep) return Numeric;
function MaxNorm(S: Numeric) return Radius;
function Contains(S,T: Numeric) return Boolean;
procedure Mult(K: in Integer; S: in out Numeric);
procedure Prod(K: in Integer; S: in Numeric; T: out Numeric);
function "*"(K: Integer; S: Numeric) return Numeric;
procedure MultAdd(K: in Integer; S: in Numeric; T: in out Numeric);
procedure Mult(R: in Rep; S: in out Numeric);
procedure Prod(R: in Rep; S1: in Numeric; S2: out Numeric);
function "*"(R: Rep; S: Numeric) return Numeric;
procedure MultAdd(R: in Rep; S1: in Numeric; S2: in out Numeric);
function "/"(S: Numeric; R: Rep) return Numeric;
pragma Inline (Scal,Approx,IsZero,SetZero);
function ReturnTrue(S: Numeric) return Boolean;
function ReturnZero(S: Numeric) return Numeric;
function ReturnZero(R: Rep) return Numeric;
function Identity(S: Numeric) return Numeric;
procedure ZeroOut(S: in out Numeric);
function Norm(S: Numeric) return Numeric renames "abs";
function Max(S,T: Numeric) return Numeric renames Numeric'Max;
function Min(S,T: Numeric) return Numeric renames Numeric'Min;
function Sup(S: Numeric) return Rep renames Approx;
function Inf(S: Numeric) return Rep renames Approx;
function IsNumeric(S: Numeric) return Boolean renames ReturnTrue;
function IsNumbers(S: Numeric) return Boolean renames ReturnTrue;
function IsSharp(S: Numeric) return Boolean renames ReturnTrue;
function ModCenter(S: Numeric) return Numeric renames ReturnZero;
procedure ModNumbers(S: in out Numeric) renames ZeroOut;
procedure ToBalls(S: in out Numeric) renames ZeroOut;
function ModNumbers(S: Numeric) return Numeric renames ReturnZero;
function BallAt0(R: Rep) return Numeric renames ReturnZero;
function BallAt0(S: Numeric) return Numeric renames ReturnZero;
function DiskAt0(R: Rep) return Numeric renames ReturnZero;
function DiskAt0(S: Numeric) return Numeric renames ReturnZero;
function Center(S: Numeric) return Numeric renames Identity;
function Disk(S: Numeric) return Numeric renames Identity;
function CenterDisk(S: Numeric) return Numeric renames Identity;
function Center0(S: Numeric) return Boolean renames IsZero;
function Contains0(S: Numeric) return Boolean renames IsZero;
function Union(S1,S2: Numeric) return Numeric renames Average;
function Intersection(S1,S2: Numeric) return Numeric renames Average;
procedure Neg(S: in out Numeric);
procedure Neg(S: in Numeric; T: out Numeric);
procedure Add(S: in Numeric; T: in out Numeric);
procedure Sum(S,T: in Numeric; P: out Numeric);
procedure Sub(S: in Numeric; T: in out Numeric);
procedure Diff(S,T: in Numeric; P: out Numeric);
procedure Mult(S: in Numeric; T: in out Numeric);
procedure Prod(S,T: in Numeric; P: out Numeric);
procedure MultAdd(S,T: in Numeric; P: in out Numeric);
function Sqr(S: Numeric) return Numeric;
function Inv(S: Numeric) return Numeric;
procedure Div(S: in Numeric; T: in out Numeric);
pragma Inline (Neg,Add,Sum,Sub,Diff,Mult,Prod,MultAdd,Sqr,Inv,Div);
procedure ShowType(S: in Numeric);
procedure Show1(N: in String; S: in Numeric);
procedure Show2(N: in String; S1,S2: in Numeric);
procedure Get(F: in File_Type; S: out Numeric; Decimal: in Boolean := True);
procedure Put(F: in File_Type; S: in Numeric; Decimal: in Boolean := True);
package EF is new Ada.Numerics.Generic_Elementary_Functions(Numeric);
function Exp(S: Numeric) return Numeric renames EF.Exp;
function Log(S: Numeric) return Numeric renames EF.Log;
function Sqrt(S: Numeric) return Numeric renames EF.Sqrt;
procedure UpMultAdd(R1,R2: in Rep; R3: in out Rep);
end Numerics;