Вот написал тут свой первый модуль.По задумке с его помощью
можно возводить в степень как в с++ с помощью функции pow(), и
выполнять численное интегрирования 4 методами. Но в возведении в степень
чего то не хватает, не пойму чего.А ответы совпадают только у метода симпсона
и правых прямоугольников, и то если использовать только тригонометрические функции
в противном случае - Float Overflow. Помогите кто-нибудь доработать.
Код

unit math;
{$F+}
interface
type func=function(x:real):real;
     Tmethod=procedure(a,b:real;n:byte; var x,EoI,h:real); {Metod integrirovanija}
                                                    {Pryamougolnikami.EoI-}
                                                    {End Of Iteration     }

function pow(x,n:real):real;                  {Vozvedenie 'X' v stepen 'N'}
function SimpsonDx(f:func;a,b:real;n:byte):real;{Opred.Integral metodom Simpsona}
function Dx(method:Tmethod;f:func;a,b:real;n:byte):real;{Opred.Integral metodom Pryamougolnikov}
procedure Left(a,b:real;n:byte; var x,EoI,h:real);  {\                                         }
procedure Right(a,b:real;n:byte; var x,EoI,h:real);{ |-Metodi integrirovanija pryamougolnikami}
procedure Middle(a,b:real;n:byte; var x,EoI,h:real);{/                                         }

implementation

function pow(x,n:real):real;
var _x:real;
    _n:integer;
begin
_n:=trunc(n);
if (x<0) and (n-_n=0)  then
   if (n>0) and ((_n mod 2)=0) then _x:=1 else _x:=-1
else
if n=0 then pow:=1 else pow:=exp(n*ln(abs(x)));
end;

function SimpsonDx(f:func; a,b:real; n:byte):real;
var h,integ,x:real;
    i:byte;
begin
if (n mod 2)>0 then inc(n);
h:=(b-a)/n;
integ:=F(a)+F(b)+4*F(a+h);
for i:=1 to (n div 2)-1 do
    begin
    x:=a+2*h*i;
    integ:=integ+2*F(x)+4*F(x+h);
    end;
SimpsonDx:=h*integ/3;
end;

procedure Left(a,b:real;n:byte; var x,EoI,h:real);
begin
     h:=(b-a)/n;
     x:=x+a;
     eoi:=b;
end;

procedure Right(a,b:real;n:byte; var x,EoI,h:real);
begin
     h:=(b-a)/n;
     x:=a;
     eoi:=b-h;
end;

procedure Middle(a,b:real;n:byte; var x,EoI,h:real);
begin
     h:=(b-a)/n;
     x:=a+h/2;
     eoi:=b-h/2;
end;

function Dx(method:Tmethod;f:func;a,b:real;n:byte):real;
var x,h,_dx,eoi:real;
begin
method(a,b,n,x,eoi,h);
repeat
_dx:=_dx+h*f(x);
x:=x+h;
until x>eoi;
Dx:=_dx;
end;

begin
end.