- •Министерство Образования и Науки рф
- •Выполнение работы Программа наPascal
- •Создание программы на я.П. Си
- •Текст программы на я.П. Ассемблер
- •Расчет метрик Измеримые характеристики программ Pascal
- •Assembler
- •Расчетные характеристики программы
- •Автоматическая оценка работы программ Pascal
- •Сводная таблица результатов:
Выполнение работы Программа на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