Dobry den, C# je na tom s delenim desetinych cisel jako java, c++ a nejspis vsechny ostatni jazyky tedy tez nedava presny vysledek pokud nepouzijete specialni objekt pro presne pocitani. Chran nas panbuh od programu ktere pocitaji ze 1 je koruna a ne haler.S pozdravem Pavel Savara Viz google predpokladam ze to tak je nejsem c# expert:Does C# have the same problem as C++ with code like this?if (GetDouble1() == GetDouble2()) { }In C++, due to the IEEE storage format, it is possible to have 2 doubles that are essentially the same value but not quite, so the above code will not do what you expect. Boost has some extensions to STL to solve this problem.Does C# have similar problems? If so, what is the right C# way ofhandlingthis issue?Yes, floating-point (not just double precision) numbers/arithmethic has this problem in virtually every language because of the representation that you have noted. One way of handling this is to calculate the precision of the machine that your code is running on and then do a comparison to see if the difference is less than or equal to the precision of the machine. If it is, then the values are identical as far as you can tell. Note that C# has the "Decimal" type that can help is many situations. Regards, Randy On 2/23/06, Benda Lukas <[EMAIL PROTECTED]> wrote: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.
Bohuzel ve chvili kdyz musite pracovat s DB jineho programu ktery ma
castky ukladany jako float(8), tak na vyber nemate :((
- Re: Numericke operace na typem Double Benda Lukas
- Re: Numericke operace na typem Double Jan Valenta
- RE: Numericke operace na typem Double Petr Zajíc
- Re: Numericke operace na typem Double Benda Lukas
- RE: Numericke operace na typem Do... Rudolf PECINOVSKÝ
- RE: Numericke operace na typ... Rastislav Siekel
- Re: Numericke operace na... Martin Kuba
- RE: Numericke operace na typem Double Rudolf PECINOVSKÝ
- Re: Numericke operace na typem Double Benda Lukas
- Re: Numericke operace na typem Do... Pavel Savara
- Re: Numericke operace na typ... Benda Lukas
- RE: Numericke operace na... Petr Zajíc
- Re: Numericke operace na... Ondřej Fafejta KYBERIE
- Re: Numericke operace na... Jan Dvořák
- Re: Numericke operace na... Tomas Hubalek
- Re: Numericke operace na... Benda Lukas
- Re: Numericke operace na typem Double Tomas Hubalek
- Re: Numericke operace na typem Double Martin Kuba
- Re: Numericke operace na typem Double Richard Malaschitz
- Re: Numericke operace na typem Double lukas
- Re: Numericke operace na typem Double Martin Kuba
