Hozzászólások
[quote:82bc648247="Elbandi"]regen egy ilyenrol hallottam:
ez pl egeszekre kerekit
trunc(szam+0.5)
amugy olvasd at a double tarolasi modjat es akkor megtudod miert van a vegen az a sok nemnulla szam
Szerintem most nem errol van szo (valoszinuleg az un. "bankár" kerekítésre gondoltal - a kereken 5 tizedes értékeket a legközelebbi páros számra kerekíti), hanem inkabb a lebegopontos szamabrazolas veges pontossagarol.
- A hozzászóláshoz be kell jelentkezni
szerintem a .5-öt éppenhogy pontosan kéne tárolnia, lévén 2 hatvány.
- A hozzászóláshoz be kell jelentkezni
A 0.5 valoban az, azonban itt 865.005 -rol volt szo...
Szerencsere keznel volt Gyakorlati C++ c. konyvem lebegopontos szamok gepi abrazolasanak korlatairol szolo fejezetenek szemlelteto peldaprogramja :wink: , ami a kovetkezo eredmenyt produkalta:
1) 0.5
(1).0 x 2 E -1
IEEE szabvany szerinti gepi abrazolas
S[0]E[01111110]M[00000000000000000000000]
A szam pontos abrazolasahoz elegseges az egyszeres pontossagu lebegopontos formatum (float)
2) 865.005
Kerek egy tortet:
865.005
(1).101100001000000010100011110101110000101000111101011 x 2 E 9
IEEE szabvany szerinti gepi abrazolas
S[0]E[10000001000]M[1011000010000000101000111101011100001010001111010110]
A szam pontos abrazolasahoz a dupla pontossagu lebegopontos formatum (double) SEM ELEGSEGES!
Mellesleg a konyv peldaprogramjai - pontosabban a forrasok - letolthetoek a http://nkari.uw.hu/konyv.php cimrol.
- A hozzászóláshoz be kell jelentkezni
[quote:bf1faf93a0="Carlos"]A 0.5 valoban az, azonban itt 865.005 -rol volt szo...
Bocsi, rosszul emlékeztem :D
- A hozzászóláshoz be kell jelentkezni
A kovetkezo program hibasan kerekiti 865.005 ket tizedes jegyre. Milyen altalanos modszer van a kovetkezo szamabrazolasbol szarmazo kerekitesi hiba kijavitasara ?
$cat ./real.c
#include <stdio.h>
/**/int main(void)
{
double x=888885.005;
double y=865.005;
double z=8.005;
printf("%.2f (%.20f)\n",x,x);
printf("%.2f (%.20f)\n",y,y);
printf("%.2f (%.20f)\n",z,z);
return 0;
}
$./a.out
888885.01 (888885.00500000000465661287)
865.00 (865.00499999999999545253)
8.01 (8.00500000000000078160)
- A hozzászóláshoz be kell jelentkezni
regen egy ilyenrol hallottam:
ez pl egeszekre kerekit
trunc(szam+0.5)
amugy olvasd at a double tarolasi modjat es akkor megtudod miert van a vegen az a sok nemnulla szam
- A hozzászóláshoz be kell jelentkezni