Citat:
Da li ce i u C biti ovakav isti rezlutat?
Rezultat zavisi od standarda za
floating point aritmetiku kog koristi runtime biblioteka. Jedan preporučeni standard je IEEE745.
Citat:
Zasto je dao priblizne vrednosti a ne tacne?
Ukratko razlog: aritmetika na računarima je uvek približna, dakle nikada ne možeš da dobiješ
tačan rezultat. Pitanje je samo koliko je ta greška velika u odnosu na sam broj. Na primer:
Neka ti je dat broj

. Računar mora da ga zapamti kao približan broj

, gde je

greška koja uvek postoji. (ovo je malo uprošćena analiza, a pravu analizu možeš da vidiš recimo
ovde).
Nešto slično kao što jednu trećinu ne možeš
tačno predstaviti konačnim brojem decimala. Možeš da staviš: npr 0.333, ali to nije tačna vrednost.
Ali, 1000.4 je „okrugao broj“, zašto tu ima problema? Pa zato što računar brojeve pamti u binarnom brojnom sistemu. U njemu, broj 1000.4 ne može da se zapiše sa konačnim brojem (binarnih) decimala. Računar odseče onaj „višak“ i zato kao posledicu dobiješ grešku zaokruživanja.
Primeti da je relativna greška (

) veoma mala.
Kada oduzmeš dva približna broja, greške zaokruživanja se sabiraju. Ako imaš dva bliska broja, može se desiti da šum usled greške „uguši“ koristan deo. Ovo je poznati fenomen
malog efekta na velikom šumu.
Protiv ovog efekta se ništa ne može uraditi, tj. on je uvek prisutan. Algoritme treba praviti tako da se efekat greške može ograničiti.
Primer:
Neka su

i

dva tačna broja koja se u računaru predstave približnim brojevima

i

. Tada je:
Njihova razlika je približno:
Sad, ako je

malo u odnosu na

, možeš da dobiješ veliku relativnu grešku

.
U ovom tvom slučaju se upravo to i desilo.
f