Prikaz jedne poruke
Stara 5.1.2016, 0:33   #243
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.086
Zahvaljeno 4.923 puta na 2.859 poruka
Određen forumom Re: How to... Java

Pre nego što uradiš "if (povuk == pov)", uradi

System.out.println("Povuk: " + povuk + ", pov: " + pov);

I vidi da li su brojevi baš različiti, ili su blizu. U prvom slučaju ti ne valja algoritam, u drugom se radi o grešci u zaokruživanju.

Kod reprezentacije realnih brojeva na kompjuteru uvek može da postoji greška u zaokruživanju (vidi floating point na wikipediji), a pritom ako vršiš sabiranje (kao npr pov1 + pov2 + pov3), greška se samo povećava. Zato se preporučuje da se double i float vrednosti ne porede direktno sa == , nego sa nekom tolerancijom, na primer za toleranciju od 2%:

if ((povuk > pov * 0.98) && (povuk < pov * 1.02)) { ... }
voodoo_ je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku voodoo_ na korisnoj poruci:
ballerina72 (6.1.2016)