Stojim za tim, ze se chyba na trinactem miste v 99% pripadu ignorovat
neda. Napr. pri formatovani pomoci sprintf jak je uvedeno vyse.
Konkretne cislo 39.9 / 10 se podle JAVA rovna 3.98999999998 takze ve
vyslednem formatovani se zobrazi 3.99 (teda pokdu zaokrouhluje, to jsem
nezkousel jinak by to vyslo 3.98)
Kdyz ale provedete 39.9 * 0.1 tak podle JAVA dostanete 4.00000000007
takze ve vyslednem formatovani ziskate 4.00
Hle ona chyba se z trinacte pozice prenesla hned na treti. Je vysoka
pravdepodobnost ze se vyskytnou pripady kdy se takova chyba prenese
dokonce na pozici druhou. Ale i v tomhle pripade se dostavate na
presnoust vypoctu kolem 1% coz je dost tristni.
Btw. nevim ktere jazyky pocitate za vetsinu. Delphi a C# temito neduhy
netrpi.
Mno, takhle se chová většina programovacích jazyků. Protože zpracování čísel
je přesné či nepřesné podle toho, zda zvolíte čísla s pevnou či pohyblivou
čárkou. Totéž platí pro databáze; typy MONEY či CURRENCY jsou na tom jinak
než FLOAT, SINGLE nebo DOUBLE (v různých DB se jmenují různě, princip však
souhlasí).
IMHO asi nebudete v praxi potřebovat dělit, zpětně násobit a porovnávat.
Jinak, porovnávat dvě float čísla se Vám dříve či později vymstí v jakémkoli
výpočtu při práci na jakémkoli programu.
Ta "nepřesná" čísla jsou tam právě proto, že chyba na třináctém místě za
desetinnou čárkou se většinou ignorovat DÁ.
Petr Zajíc
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Behalf Of Benda Lukas
Sent: Thursday, February 23, 2006 10:14 PM
To: Java
Subject: Re: Numericke operace na typem Double
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.