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