[ borovac @ 05.01.2005. 13:32 ] @
Zašto mi slijedeća poruka ne pokazije 0 već 612303176911189E-17
Code:
ShowMessage(FloatToStr(Cos(DegToRad(90))));

probao sam i
Code:
showmessage(FloatToStr(cos(pi/2)));

ovo je cosuinus ugla 90° ili pi/2 i on je jednak nuli
[ sasas @ 05.01.2005. 14:01 ] @
Verovatno je u pitanju mala nepreciznost fp operacija, no big deal (osim ako ne programiras putanju prve ljudske misije na mars). Jednostavno zaokruzi rezultat:

ShowMessage(Format('%.5f', [Cos(DegToRad(90))]));

ss.
[ neor @ 05.01.2005. 15:51 ] @
Nije u pitanju nepreciznost fp operacija vec nacin cuvanja fp brojeva.
Za njih je obezbedjen samo konstantan broj bitova a Pi se ne moze zapisati sa konacnim brojem cifara tako da Pi/2 u paskalu nije matematicki Pi/2 pa ni sve sta iz toga sledi vise nije apsolutno tacno vec samo priblizno.

Jedino ti ostaje da za sopstvene potrebe odredis kolika ti je tacnost potrebna i zaokruzis na potreban broj decimala kao sto sasas predlaze.

Najvise problema obicno izazove poredjenje fp brojeva pa je dobro da za to napravis sopstvenu funkciju
na primer
Code:

function JeNula(X:Double;Err:Double=0.0001):Boolean;
begin
 Result := (Abs(X) < Err);
end;

[ bancika @ 05.01.2005. 23:32 ] @
u math.pas postoji CompareValue(value1, value2, epsilon: extended) koja vraca -1 ako je prvi manji od drugog - epsilon, 0 ako su jednaki sa tacnoscu epsilon i 1 u trecem slucaju