> At se to zda absurdi kupodivu v naprosto bezne praci > potrebuju presnost. > Kdyz mam delat testy musim mit jistotu ze 39.9 / 10 = 39.9 *0.1 = > 39.9/100. Kdyz mi kazda tato operace vrati jiny vysledek pak je neco > sakra spatne. Takze typ double pro mne vlastne efektvine skocil.
Sakra špatně je program, který testuje dva double na rovnost. Všechny slušné kurzy programování jasné varují, že přímé porovnání dvou hodnot double je zakázaná operace. Lze-li předem odhadnout řádovou velikost provonávaných hodnot, musí se dvě hodnoty d1 a d2 typu double porovnávat buď abs(d2 - d1) < eps kde eps je nějaké předem zvolené číslo, které je výrazně menžší než požadovaná přensot (už to tu někdo psal). Není-li možno předem odhadnout řádovou velikost (tj. jestli to budou tisíce nebo tisíciny), je to obtížnější - pak se musí porovnávat např. abs(1 - d1/d2) < eps Při běžné práci opravdu není potřeba větší přesnost, než oněch doublem zaručených 15 cifer. S takovou přesností se totiž v běžné praxi nic neměří, takže není důvod na ní trvat. Taková zaručená přesnost je většinou potřeba pouze ve finančních výpočtech, kde potřebujete počítat miliardami a bilióny s přesností na halíře. Druhou oblastí jsou pak naumerická řešení všelijakých rozsáhlých rovnic popisujících tuhé systémy, protože tam je občas potřeba odečíst dvě skoro stejná čísla a nemám-li dostatečný počet platných cifer, jsem v ... Opravdu existují úlohy, kde je třeba místo double používat např. BigDecimal, ale není jich tak moc. I při výpočtech s pomocí BigDecimal vznikají zaokrouhlovací chyby a hlavně jsou tyto výpočty mnohem, ale opravdu mnohem pomalejší. Ne vždy jsme přitom za ono částečné zvýšení přesnosti ochotni touto pomalostí platit. -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.375 / Virus Database: 268.0.0/267 - Release Date: 22.02.06 st
