PERL NEUMI POCITAT!!!
Ondrej Pokluda
archiv.ondrej na atlas.cz
Pátek Září 29 10:39:04 CEST 2000
> Zdravim,
>
> narazil jsem na nepochopitelny problem! Nize uvadim zdrojak, ktery mi na
Debianu 2.2 (perl 5.005 patch 3) hlasi misto 208.2 vysledek
208.199999999999. Neachapu. Rozumite tomu nekdo ???
>
> diky,
> Dominik
>
Pripojim se k tomu, co zde jiz napsali kolegove. Myslim, ze se jedna o
typicke
GIGO (garbage in - garbage out). Pustil jsem si debugger a zkusil to
pocitat primo v registrech koprocesoru s nasledujicimi vysledky:
Binarni (64 bit reprezentace cisla) 9688.9 je v x86:
9A 99 99 99 59 84 C2 40
povsimnete si porusene periody 9A vznikle zaokrouhlenim nekonecneho
binarniho rozvoje cisla s konecnym dekadickym rozvojem.
Binarni (64 bit reprezentace cisla) 9688.9 je v x86:
33 33 33 33 73 EC C2 40
Jejich rozdil (opet v 64 bitech):
40 66 66 66 66 06 6A 40
coz dle meho debuggeru je
+2.08199999999998908e+0002, cili to co dostavate.
Poznamky:
1) Pripisuji si trestne body a jdu se posdtavit na pet minut do kouta,
to, co jsem predvedl neni matematicky dukaz, ale ukaz. Kdyby to
chtel nekdo exaktne dokazat, spal bych klidneji :-)
2) Vsechny tyto experimenty jsem delal na M$, lec prostrednictvim
asembleru, nemelo by to na veci nic zmenit.
3) Zkuste prosim nekdo na linuxu (nemohu ted prebootovat) nasledujici
program:
#include <stdio.h>
int main(int argc, char* argv[])
{
double a=9480.7;
double b = 9688.9;
printf("%30.20le\n",b-a);
return 0;
}
ja dostavam
2.08199999999998910000e+002
coz je ve shode s vysledkem z perlu.
4) Az doted jsem byl off-topic. Ted se zaeptam na neco on-topic.
Jak je to s C prekladaci a podporou 80bit floatu. M$VC ma long
double == double, stejne to bylo u gcc, kdyz jsem se na to dival
naposledy. Jediny prekladac, ktery mam a kde long double
je 80 bitovy je staricky Borland. Jak je to v soucasne dobe na
linuxu (nekdy se tech 16 bitu hodi).
5) Opet musim opakovat kolegy. Nepouzivejte floating point
u cisel, ktera jsou svym charakterem fixed point. Opakuji:
Nepouzivejte floating point u cisel, ktera jsou svym charakterem
fixed point.
S pozdravem
Ondrej Pokluda
Další informace o konferenci Linux