Proměnná typu FLOAT se po přičtení malého přírustku nezvětší

Proměnná typu FLOAT se po přičtení malého přírustku nezvětší

Příspěvekod riha » úte 25. říj 2011 9:40:42

Jestliže počítáte SUMA = SUMA + PRIRUSTEK a proměnná SUMA je typu FLOAT, pak je třeba si uvědomit, že sice maximální možné číslo proměnné SUMA je 3,4e38, avšak vzhledem k tomu, že toto číslo je uloženo v exponenciálním tvaru, je samotné číslo uloženo pouze na 23 bitech, 8 bitů je použito pro exponent a jeden bit pro znaménko.
Pokud tedy k hodnotě SUMA = 8388608 (2^23+1) přičtete PRIRUSTEK = 1, nastane situace, kdy SUMA a SUMA+PRIRUSTEK jsou si rovny a přičítání se nijak neprojeví. Podobně je tomu i v případě, že PRIRUSTEK = 0,001. SUMA se "zastaví" na hodnotě 8192. Pro PRIRUSTEK = 0,1 je pak maximální SUMA = 524288 atd.
Zbyněk Říha
Technická podpora (support@amit.cz)
AMiT spol. s r.o.
Uživatelský avatar
riha
 
Příspěvky: 376
Registrován: čtv 10. dub 2008 12:46:00

Zpět na Algoritmy

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků

cron