Vsechny ulohy kde je treba pocitat s penezi na dve desetine mista (takze kdyz vlastne kazde ucetnictvi) potrebuje, jak jsem psal v predchozim prispevku 39.9 / 10 a 39.9 * 0.1 pri formatovani vystupu %.2f da jednou vysledek 3.99 a podruhe 4 a hned mate halerove manko.

Tady se rekne halir, tezko rict jestli nenajdeme kombinaci cisel kdy to da deset haleru. Pak uz zacnou problem a velke problemy.
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.



Odpovedet emailem