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