Posted By: robo_1 (robo) on 'CZprogram'
Title:     Re: ia64 v. amd64
Date:      Wed Nov 19 11:45:08 2008


Vypocty s floaty jsou vzdy nepresne a je potreba s tim pocitat. Problem je v 
tom, ze i tak trivialni cislo jako je 0.1 nelze binarnim floatem presne 
vyjadrit, protoze ve dvojkove soustave ma toto cislo nekonecny pocet 
desetinnych cislic.
Jak IA64 tak AMD64 umi pracovat s 32, 64 a 80-bitovym floatem, tady zrejme 
rozdil nebude. Pokud ale pouzivas v programu typ float nebo double, bude 
behem vypoctu dochazet ke konverzi z 80-bit floatu (registry FPU) na 64-bit 
floaty a tim ke ztrate presnosti. Jak casto bude tato konverze provadena 
zalezi na tom, kolik a jakych mezivysledku dokaze kompilator drzet v 
registrech. Dale take zalezi na tom, v jakem poradi se kompilator rozhodne 
jednotlive operace provadet. (a + b) + c muze dat jiny vysledek nez a + (b + 
c). Jiny vysledek tudiz s velkou pravdepodobnosti dostanes nejen na jinem 
CPU ale i na stejnem CPU, pokud program prelozis s jinymi optimalizacemi 
(release vs debug verze).

==> je potreba se smirit s tim, ze vypocty s floaty muzou dat pokazde malicko 
jiny vysledek.

Nevim o jake vypocty se jedna, ale treba by bylo resenim pouzit desitkovy 
float (decimal). Tam odpada ztrata presnosti pri konverzi z desitkove 
soustavy na dvojkovou a tak je mozne za urcitych okolnosti (treba scitani 
cisel s omezenym poctem desetinnych mist) dosahnou presneho vysledku - 
idealni pro ucetni vypocty apod. Nevyhoda je, ze vypocty jsou radove 
pomalejsi. 

 
  

Robo

Search the boards