so des Aha macht gleich mal den Anfang
also folgendes Problem, dieses hübsche delphi-Programm (zu allen mögliche Vektorrechungen) :
(alle Variablen außer dem counter sind als real deklariert)
(initialisierungen und anderer schnullipups sind aus Platzgründen mal weggelassen worden ^^ )
Code:
procedure TFormVektor.go1Click(Sender: TObject);
begin
if counter=0 then
begin
ax:= strtoint(editax.text);
ay:= strtoint(editay.text);
az:= strtoint(editaz.text);
bx:= strtoint(editbx.text);
by:= strtoint(editby.text);
bz:= strtoint(editbz.text);
if ((ax=0) and (ay=0) and (az=0))
or ((bx=0) and (by=0) and (bz=0)) then
begin
label0vektor.caption:= 'MÖP keine Nullvektoren bidde :D - danke';
end
else
begin
label0vektor.caption:='';
ab:= sqrt(sqr(ax)+sqr(ay)+sqr(az));
bb:= sqrt(sqr(bx)+sqr(by)+sqr(bz));
editab.text:= format('%3.1f',[ab]);
editbb.text:= format('%3.1f',[bb]);
skalar:= ax*bx+ay*by+az*bz;
editskalar.text:= format ('%3.1f',[skalar]);
coab:= ((skalar)/(ab*bb));
bwab:= arccos(coab);
wiab:= (bwab)/(Pi)*180;
editwab.text:= format('%3.1f',[wiab]);
vx:= ay*bz-az*by;
vy:= az*bx-ax*bz;
vz:= ax*by-ay*bx;
editvx.text:= format('%3.1f',[vx]);
editvy.text:= format('%3.1f',[vy]);
editvz.text:= format('%3.1f',[vz]);
para:= sqrt(sqr(vx)+sqr(vy)+sqr(vz));
Drei:= 1/2 * para;
editparallel.text:= format('%3.1f',[para]);
editdreieck.text:= format('%3.1f',[drei]);
end;
end;
if counter=1 then
begin
ax:= strtoint(editax.text);
ay:= strtoint(editay.text);
az:= strtoint(editaz.text);
bx:= strtoint(editbx.text);
by:= strtoint(editby.text);
bz:= strtoint(editbz.text);
cx:= strtoint(editcx.text);
cy:= strtoint(editcy.text);
cz:= strtoint(editcz.text);
if ((ax=0) and (ay=0) and (az=0))
or ((bx=0) and (by=0) and (bz=0))
or ((cx=0) and (cy=0) and (cz=0)) then
begin
label0vektor.caption:= 'MÖP keine Nullvektoren bidde :D - danke';
end
else
begin
label0vektor.caption:='';
vx:= ay*bz-az*by;
vy:= az*bx-ax*bz;
vz:= ax*by-ay*bx;
ab:= sqrt(sqr(ax)+sqr(ay)+sqr(az));
bb:= sqrt(sqr(bx)+sqr(by)+sqr(bz));
editab.text:= format('%3.1f',[ab]);
editbb.text:= format('%3.1f',[bb]);
coab:= ((skalar)/(ab*bb));
bwab:= arccos(coab);
wiab:= (bwab)/(Pi)*180;
editwab.text:= format('%3.1f',[wiab]);
cb:= sqrt(sqr(cx)+sqr(cy)+sqr(cz));
editcb.text:= format('%3.1f',[cb]);
skalarbc:= bx*cx+by*cy+bz*cz;
skalarca:= cx*ax+cy*ax+cz*az;
cobc:= ((skalarbc)/(bb*cb));
coca:= ((skalarca)/(cb*ab));
bwbc:= arccos(cobc);
bwca:= arccos(coca);
wibc:= (bwbc)/(Pi)*180;
wica:= (bwca)/(Pi)*180;
editwbc.text:= format('%3.1f',[wibc]);
editwca.text:= format('%3.1f',[wica]);
Spat:= vx*cx+vy*cy+vz*cz;
Pyramide:= 1/6 * Spat;
editspat.text:= format('%3.1f',[spat]);
editpyramide.text:= format('%3.1f',[pyramide]);
end;
end;
end;
erzeugt bei ungefähr gleich großen Vektoren einen Gleitkomma-Error. Kennt jemand eine Möglichkeit diesen zu verhindern?