PERL NEUMI POCITAT!!!
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Čtvrtek Září 28 13:54:30 CEST 2000
On Wed, 27 Sep 2000, Michal Krause wrote:
> Pokazde jsou to samozrejme takoveto drobne rozdily, ale pokud je to tak
> bezne, pak se ptam, proc tim jine jazyky netrpi?
Eh?
#include <stdio.h>
int
main()
{
float f = 851.9 - 810.2;
double d1 = 851.9 - 810.2;
double d2 = 851.9L - 810.2L;
printf("%.20f %.20f %.20f\n", f, d1, d2);
return 0;
}
Vysledek:
41.70000076293945312500 41.69999999999993178790 41.70000000000000284217
Vtip je akorat v tom, ze vetsinou je vysledek vtipne zaokrouhlen, a tudiz
neni ta chyba videt.
Vysledek z Perlu je 41.6999999999999, coz by odpovidalo situaci, kdy je
prostredni z ceckovych vysledku zaokrouhlen na vhodne mnozstvi desetinnych
cislic. Je pravda, ze to indikuje, ze Perl asi pracuje nekdy s floaty a
nekdy s doubly, nasledkem ceho si presnost vysledku kazi (stejne
nechapu, proc pouzivat float, kdyz uz stejne vsichni maji hw FPU).
> Staci to jenom zkouset. Zvlastni je, ze to obvykle dela jenom odecitani
> dvou blizkych cisel. Vlastne nejvetsi rozdil, pri nemz se to jeste
> projevilo byl okolo jednoho sta.
To zrejme souvisi s tim, ze Perl vlastne nejspis vola pri konverzi
FPN na text funkci gcvt() a jako pocet cislic zadava 15. Kdyz je pred
desetinou teckou dost cislic, tak se to na druhe strane urizne tak, ze
se to zaokrouhli nahoru a tudiz to vypada dobre.
V kazdem pripade, jestli chcete dostavat dobre a rozumne presne vysledky,
tak bud pocitejte vyhradne celociselne, nebo si nastudujte aspon zaklady
numericke matematiky.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux