Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №11.doc
Скачиваний:
43
Добавлен:
01.05.2014
Размер:
434.69 Кб
Скачать

Выполнение работы Программа наPascal

program erfd3;

{ evaluation of the gaussian error function }

var x,er,ec : real;

done : boolean;

function erf(x: real): real;

{ infinite series expansion of the Gaussian error function }

const sqrtpi = 1.7724538;

tol = 1.0E-4;

var x2,sum,sum1,term: real;

i : integer;

begin

x2:=x*x;

sum:=x;

term:=x;

i:=0;

repeat

i:=i+1;

sum1:=sum;

term:=2.0*term*x2/(1.0+2.0*i);

sum:=term+sum1

until term<tol*sum;

erf:=2.0*sum*exp(-x2)/sqrtpi

end; { erf }

function erfc(x: real): real;

{ complement of error function }

const sqrtpi = 1.7724538;

terms = 12;

var x2,u,v,sum : real;

i : integer;

begin

x2:=x*x;

v:=1.0/(2.0*x2);

u:=1.0+v*(terms+1.0);

for i:=terms downto 1 do

begin

sum:=1.0+i*v/u;

u:=sum

end;

erfc:=exp(-x2)/(x*sum*sqrtpi)

end; { ercf }

begin { main }

ClrScr;

done:=false;

writeln;

repeat

write('Arg? ');

readln(x);

if x<0.0 then done:=true

else

begin

if x=0.0 then

begin

er:=0.0;

ec:=1.0

end

else

begin

if x<1.5 then

begin

er:=erf(x);

ec:=1.0-er

end

else

begin

ec:=erfc(x);

er:=1.0-ec

end { if }

end;

writeln('X= ',x:8:4,' Erf= ',er:12:8,', Erfc= ',ec:12)

end { if }

until done

end.

Создание программы на я.П. Си

#include <math.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

const int count = 3;

float x,er,ec;

int done;

float erf(float x)

{

const sqrtpi = 1.7724538,

tol = 1.0E-4;

float x2,sum,sum1,term;

int k,i;

x2 = x*x;

sum=x;

term=x;

for(i=0; term<tol*sum; i++) {

sum1=sum;

term=2.0*term*x2/(1.0+2.0*i);

sum=term+sum1;

}

return (2*sum*exp(-x2)/sqrtpi);

// return erf;

}

float erfc( float x )

{

const sqrtpi = 1.7724538;

float terms = 12;

float x2,u,v,sum ;

int i;

x2=x*x;

v=1.0/(2.0*x2);

u=1.0+v*(terms+1.0);

for(i=terms; i>1; i--) {

sum=1.0+i*v/u;

u=sum;

}

return(exp(-x2)/(x*sum*sqrtpi));

// return(erfc);

}

void main()

{

int k;

done=0;

printf("\n");

//do

//{

randomize();

for(k=0; k<count; k++) {

//printf("Arg? ");

//scanf("%f",&x);

x=random(1000)/100;

if( x < 0.0 ) { done = 1; }

else

{

if (x==0.0 )

{

er=0.0;

ec=1.0;

}

else

{

if( x<1.5)

{

er=erf(x);

ec=1.0-er;

}

else

{

ec=erfc(x);

er=1.0-ec;

}

}

//printf("X= %f",x ," Erf= %f",er,", Erfc= %f",ec);

}

// } while (done == 0);

}

Текст программы на я.П. Ассемблер

_erf proc near

push bp

mov bp,sp

sub sp,32

push si

mov word ptr [bp-2],1

mov word ptr [bp-4],0

fld dword ptr [bp+4]

fmul dword ptr [bp+4]

fstp dword ptr [bp-8]

fld dword ptr [bp+4]

fstp dword ptr [bp-12]

fld dword ptr [bp+4]

fstp dword ptr [bp-20]

xor si,si

fwait

jmp short @1@114

@1@58:

fld dword ptr [bp-12]

fstp dword ptr [bp-16]

fld dword ptr [bp-20]

fmul dword ptr DGROUP:s@

fmul dword ptr [bp-8]

mov word ptr [bp-22],si

fild word ptr [bp-22]

fmul dword ptr DGROUP:s@

fld1

fadd

fdiv

fstp dword ptr [bp-20]

fld dword ptr [bp-20]

fadd dword ptr [bp-16]

fstp dword ptr [bp-12]

fwait

inc si

@1@114:

mov ax,word ptr [bp-4]

mov word ptr [bp-22],ax

fild word ptr [bp-22]

fmul dword ptr [bp-12]

fcomp dword ptr [bp-20]

fstsw word ptr [bp-22]

fwait

mov ax,word ptr [bp-22]

sahf

ja short @1@58

fld dword ptr DGROUP:s@

fmul dword ptr [bp-12]

fstp tbyte ptr [bp-32]

fld dword ptr [bp-8]

fchs

sub sp,8

fstp qword ptr [bp-42]

fwait

call near ptr _exp

add sp,8

fld tbyte ptr [bp-32]

fmul

mov ax,word ptr [bp-2]

mov word ptr [bp-22],ax

fild word ptr [bp-22]

fdiv

jmp short @1@170

@1@170:

pop si

mov sp,bp

pop bp

ret

_erf endp

assume cs:_TEXT

_erfc proc near

push bp

mov bp,sp

sub sp,34

push si

mov word ptr [bp-2],1

fld dword ptr DGROUP:s@+4

fstp dword ptr [bp-6]

fld dword ptr [bp+4]

fmul dword ptr [bp+4]

fstp dword ptr [bp-10]

fld dword ptr [bp-10]

fmul dword ptr DGROUP:s@

fld1

fdivr

fstp dword ptr [bp-18]

fld dword ptr [bp-18]

fld dword ptr [bp-6]

fld1

fadd

fmul

fld1

fadd

fstp dword ptr [bp-14]

fld dword ptr [bp-6]

call near ptr N_FTOL@

mov si,ax

jmp short @2@114

@2@58:

mov word ptr [bp-24],si

fild word ptr [bp-24]

fmul dword ptr [bp-18]

fdiv dword ptr [bp-14]

fld1

fadd

fstp dword ptr [bp-22]

fld dword ptr [bp-22]

fstp dword ptr [bp-14]

fwait

dec si

@2@114:

cmp si,1

jg short @2@58

mov ax,word ptr [bp-2]

mov word ptr [bp-24],ax

fild word ptr [bp-24]

fld dword ptr [bp+4]

fmul dword ptr [bp-22]

fmul

fstp tbyte ptr [bp-34]

fld dword ptr [bp-10]

fchs

sub sp,8

fstp qword ptr [bp-44]

fwait

call near ptr _exp

add sp,8

fld tbyte ptr [bp-34]

fdiv

jmp short @2@170

@2@170:

pop si

mov sp,bp

pop bp

ret

_erfc endp

assume cs:_TEXT

_main proc near

push bp

mov bp,sp

sub sp,2

push si

mov word ptr DGROUP:_done,0

mov ax,offset DGROUP:s@+8

push ax

call near ptr _printf

pop cx

xor ax,ax

push ax

call near ptr _time

pop cx

push ax

call near ptr _srand

pop cx

xor si,si

jmp @3@310

@3@58:

xor ax,ax

mov dx,32768

push ax

push dx

call near ptr _rand

cwd

push ax

push dx

xor dx,dx

mov ax,1000

pop cx

pop bx

call near ptr N_LXMUL@

push dx

push ax

call near ptr N_LDIV@

mov bx,100

cwd

idiv bx

mov word ptr [bp-2],ax

fild word ptr [bp-2]

fstp dword ptr DGROUP:_x

fld dword ptr DGROUP:_x

fldz

fcompp

fstsw word ptr [bp-2]

fwait

mov ax,word ptr [bp-2]

sahf

jbe short @3@114

mov word ptr DGROUP:_done,1

jmp @3@282

@3@114:

fld dword ptr DGROUP:_x

fldz

fcompp

fstsw word ptr [bp-2]

fwait

mov ax,word ptr [bp-2]

sahf

jne short @3@170

fldz

fstp dword ptr DGROUP:_er

fld1

fstp dword ptr DGROUP:_ec

fwait

jmp short @3@282

@3@170:

fld dword ptr DGROUP:_x

fcomp dword ptr DGROUP:s@+10

fstsw word ptr [bp-2]

fwait

mov ax,word ptr [bp-2]

sahf

jae short @3@226

fld dword ptr DGROUP:_x

sub sp,4

fstp dword ptr [bp-8]

fwait

call near ptr _erf

pop cx

pop cx

fstp dword ptr DGROUP:_er

fld dword ptr DGROUP:_er

fld1

fsubr

fstp dword ptr DGROUP:_ec

jmp short @3@254

@3@226:

fld dword ptr DGROUP:_x

sub sp,4

fstp dword ptr [bp-8]

fwait

call near ptr _erfc

pop cx

pop cx

fstp dword ptr DGROUP:_ec

fld dword ptr DGROUP:_ec

fld1

fsubr

fstp dword ptr DGROUP:_er

@3@254:

fwait

@3@282:

inc si

@3@310:

cmp si,word ptr DGROUP:_count

jge @@0

jmp @3@58

@@0:

pop si

mov sp,bp

pop bp

ret