> Stojim za tim, ze se chyba na trinactem miste v 99% pripadu ignorovat
> neda. Napr. pri formatovani pomoci sprintf jak je uvedeno vyse.
Opak je pravdou
> 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
Jak kde - mně vychází:
39.9 * 0.1 = 3.99
39.9 + 0.1 = 40.0
V programu:
public static void test() {
System.out.println("\f");
double a = 39.9;
double b = 0.1;
System.out.println( a + " * " + b + " = " + (a*b) );
System.out.println( a + " + " + b + " = " + (a+b) );
}
Díval jste se opravdu dobře na to, co zadáváte?
> Hle ona chyba se z trinacte pozice prenesla hned na treti.
Jak jsem byl ukázal, chyba naopak nebyla vůbec žádná. Nicméně i kdyby byla
taková, jak
jste psal, tak se v žádnom případě nepřesunula na třetí pozici, ale byla na
jedenácté,
protože ten výsledek byl urrčitě výsledek nějakého sčítání a ne násobení. Leda
byste měl
nějaký nabouraný koprocesor.
> Je vysoka pravdepodobnost ze se vyskytnou pripady kdy se
> takova chyba prenese dokonce na pozici druhou.
Když program napíšu blbě, tak opravdu ano.
> Btw. nevim ktere jazyky pocitate za vetsinu. Delphi a C#
> temito neduhy netrpi.
Trpí jimi všechny programovací jazyky, protože všechny jazyky používají v
počítači
stejný koprocesor, který tyhle výpočty provádí. Jediný rozdíl je v tom, jakou
používáte
proceduru pro tisk - pokud používáte v jednom jazyku zaokrouhlovací proceduru a
v druhém
ne, nemůžete jejich výsledky porovnávat.
Začněte v Dephi tisknout s přesností na 15 desetinných míst a budete dostávat
stejné
výsledky jako u prinln v Javě. Budete-li naopak používat formátovaný výstup v
Javě,
vůbec takovéte drobné odchylky nezaznamenáte.
Používejte printf a porovnávejte hodnoty korektně a máte po starostech.
--
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