/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Regnefejl
Fra : jan


Dato : 01-10-02 22:28

java laver en regnefejl, kan nogen forklare mig hvad der går galt:
har følgende kode:
public class Test6
{
public static void main(String args[])
{
int i=5; int j=8; double x=12.6; double y=3.2; int k; double z;
k=i+j;
System.out.println(k);
k=i+(int)x;
System.out.println(k);
k=i*(int)x;
System.out.println(k);
k=j/i;
System.out.println(k);
k=j%i;
System.out.println(k);
k=j/(int)x;
System.out.println(k);
z=i+j;
System.out.println(z);
z=i+x;
System.out.println(z);
z=i*x;
System.out.println(z);
z=j/i;
System.out.println(z);
z=j%i;
System.out.println(z);
z=j/x;
System.out.println(z);z=x/y;System.out.println(z);
z=(double) 2.0/3.0;
System.out.println(z);
}
}

det giver en regnefejl i den med

Ï
ÏÏ«Ï ----jGRASP exec: java Test6
ÏϧÏ
ÏϧÏ13
ÏϧÏ17
ÏϧÏ60
ÏϧÏ1
ÏϧÏ3
ÏϧÏ0
ÏϧÏ13.0
ÏϧÏ17.6
ÏϧÏ63.0
ÏϧÏ1.0
ÏϧÏ3.0
ÏϧÏ0.6349206349206349
ÏϧÏ3.9374999999999996 XXXX det skal give 3,9375
ÏϧÏ0.6666666666666666
ÏϧÏ
ÏÏ©Ï ----jGRASP: operation complete.
¼¼ÏÏ

xxxx i det følgende:





 
 
Bertel Lund Hansen (01-10-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 01-10-02 22:39

jan skrev:

>ÏϧÏ3.9374999999999996 XXXX det skal give 3,9375

Det gør det sådan set også. Men pc'er regner i visse tilfælde
internt med decimaltal på binærform. Det giver små fejl. Dem skal
man tage højde for.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

jan (01-10-2002)
Kommentar
Fra : jan


Dato : 01-10-02 22:44

mange tak


"Bertel Lund Hansen" <nospam@lundhansen.dk> skrev i en meddelelse
news:dc5kpu0100jbvt7ijl2s28alpvklv1j78v@news.telia.dk...
> jan skrev:
>
> >ÏϧÏ3.9374999999999996 XXXX det skal give 3,9375
>
> Det gør det sådan set også. Men pc'er regner i visse tilfælde
> internt med decimaltal på binærform. Det giver små fejl. Dem skal
> man tage højde for.
>
> --
> Bertel
> http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/



Thorbjoern Ravn Ande~ (02-10-2002)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 02-10-02 06:55

Bertel Lund Hansen <nospam@lundhansen.dk> writes:

> Det gør det sådan set også. Men pc'er regner i visse tilfælde
> internt med decimaltal på binærform. Det giver små fejl. Dem skal
> man tage højde for.

Datamater regner sædvanligvis med binære representationer af tal, og
den sete fejl er typisk for omregninger imellem disse. Det er
sædvanligvis betydeligt langsommere at regne med decimal
representationer, da dette sjældent understøttes af processoren.

--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn

Bertel Lund Hansen (02-10-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 02-10-02 13:54

Thorbjoern Ravn Andersen skrev:

>> Det gør det sådan set også. Men pc'er regner i visse tilfælde
>> internt med decimaltal på binærform. Det giver små fejl. Dem skal
>> man tage højde for.

>Datamater regner sædvanligvis med binære representationer af tal, og
>den sete fejl er typisk for omregninger imellem disse.

Ja, når nogle af dem er decimaltal hvilket mig bekendt (også) er
et navn for flydende komma-tal (Hvad vil du kalde dem?). Hvis der
derimod regnes binært med heltal, kommer fejlen ikke.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Thorbjoern Ravn Ande~ (02-10-2002)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 02-10-02 15:31

Bertel Lund Hansen <nospam@lundhansen.dk> writes:

> Ja, når nogle af dem er decimaltal hvilket mig bekendt (også) er
> et navn for flydende komma-tal (Hvad vil du kalde dem?). Hvis der

Dvs du bruger betegnelsen "decimaltal" for "floating point" i den
saedvanlige forstand? Jeg troede du mente BCD-kodede tal. Fejl tog
jeg aabenbart. Jeg bruger selv decimaltal for sagen, i mangel paa
bedre.

> derimod regnes binært med heltal, kommer fejlen ikke.

Hvis der blev regnet binaert med heltal det aktuelle tilfaelde, ville
resultatet ellers vaere blevet 4.

Var det det du mente?

--
Thorbjørn Ravn Andersen
http://homepage.mac.com/ravn

Bertel Lund Hansen (02-10-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 02-10-02 16:42

Thorbjoern Ravn Andersen skrev:

>Dvs du bruger betegnelsen "decimaltal" for "floating point" i den
>saedvanlige forstand?

Ja, jeg har aldrig kaldt det andet end decimaltal eller
decimalbrøker i matematik.

>Jeg troede du mente BCD-kodede tal.

Ja, det kunne jeg regne ud.

>Hvis der blev regnet binaert med heltal det aktuelle tilfaelde, ville
>resultatet ellers vaere blevet 4.
>Var det det du mente?

Ja.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Frank Hahn (01-10-2002)
Kommentar
Fra : Frank Hahn


Dato : 01-10-02 22:46

"jan" <jan1963@e-mail.dk> wrote in message news:and416$bfr$1@sunsite.dk...
> java laver en regnefejl, kan nogen forklare mig hvad der går galt:
> har følgende kode:

<snip>
> int i=5; int j=8; double x=12.6; double y=3.2; int k; double z;
<snip>
> z=x/y;System.out.println(z);
<snip>
> 3.9374999999999996 XXXX det skal give 3,9375

Jeg fik præcist samme resultat.
MEN for lige at gøre det VIRKELIGT underligt,
så prøvede jeg lige med float (lavere præcision end double)
og fik underligt nok det korrekte resultat....

float x = 12.6f; float y = 3.2f; float z = x/y;

Jeg er nu glad for at jeg kun benytter int og long til dagligt..

/Frank




Michael Banzon (02-10-2002)
Kommentar
Fra : Michael Banzon


Dato : 02-10-02 20:27

> Jeg er nu glad for at jeg kun benytter int og long til dagligt..

Yiah! Komma-tal er et dirty hack!! Det er en M$-ting! Noget man skal
holde sig laaaaaaaaaaaaaaaangt væk fra!!!

/ Michael


Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste