Citat:
zastita:
float a;
a=2.001;
printf("%f\n", a);
if (a==2.001) printf("Tacno");
if (a==2.001000) printf("Tacno");
Ovo nikad nece ispisati Tacno.
Zasto???
Dragi cale je napisao kako se problem zaobilazi u programima, a evo i objasnjenja zasto nastaje ovako nesto.
Floating point brojevi predstavljaju se u formatu koji sve vrednosti izrazava kao neki stepen dvojke. Kod tipa
float je taj stepen negativan, tj. svi brojevi se iskazuju preko sume nekih od razlomaka 1/2, 1/4, 1/8, 1/16 itd, pa jos puta eksponent, to je ono e+10 na primer.
Deseti deo (0.1), stoti deo (0.01) itd ne mogu se napisati sa konacno mnogo bita u ovakvoj predstavi, nesto slicno kao sto 1/3 u dekadnom sistemu mozes da predstavis samo sa 0.33333, gde broj trojki ide u beskonacnost. Zato kada upises 2.001, desi se odsecanje na najnizem bitu rezultata i u tvoju float promenljivu se ne upise 2.001 nego nesto drugo, sto predstavlja broj 2.001 odsecen na poslednjem znacajnom bitu, koliko god da to iznosi.
Probaj da ispises vrednost float broja koju dobijas citanjem promenljive pa ces videti sta se desava, osim u slucaju da printf funkcija ne zaokruzuje vrednosti (sto ne bi smela da radi).
poz.