• 3 odgovora
  • 2.119 pregleda
Problem: nE računa Cos(DegToRad(90)) 05.01.2005. u 13:32 · pre 265 meseci #1
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
Re: Problem: nE računa Cos(DegToRad(90)) 05.01.2005. u 14:01 · pre 265 meseci #2
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.
Potpis
When something is hard to do, then it's not worth doing.
Re: Problem: nE računa Cos(DegToRad(90)) 05.01.2005. u 15:51 · pre 265 meseci #3
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;

Re: Problem: nE računa Cos(DegToRad(90)) 05.01.2005. u 23:32 · pre 265 meseci #4
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
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme