# Problem mit Gleitkommadivision



## Guest (14. Jan 2005)

Ich habe folgende Frage: 
Warum kommen verschiedene Ergebnisse raus?

```
double w=1;
double x=1;
double tmp = w/x
```


```
double w=1;
double x=1;
double tmp =(double) w/x
```


----------



## The_S (14. Jan 2005)

Was bekommst du den für Ergebnisse raus?


----------



## Sky (14. Jan 2005)

Ich habe mir das Ergebnis per "System.out.print" mal anzeigen lassen und bekomme in beiden Fällen "1.0" heraus.

Ergo: Kein Unterschied erkennbar.


----------



## thE_29 (14. Jan 2005)

Also bei mir kommt immer das gleiche raus ;>


----------



## KSG9|sebastian (14. Jan 2005)

wenn du als werte "1" angibst, dann rechnet der compiler die sachen intern in nen Integer-Typ um (macht er im übrigen auch wenn du den datentyp long nimmst). 

deshalb kommt bei der ersten division wohl "1" raus und bei der zweiten division "1.000" oder sowas.

durch den cast mit (double) erzwingst du die nachkommastellen


----------



## thE_29 (14. Jan 2005)

Es sind aber alles double Variablen => ergo es gibt immer Nachkommazahlen!


----------



## KSG9|sebastian (14. Jan 2005)

kommt glaub auch auf das sdk an..bei mir kommt 1 und 1.0000xxx raus, falls du das mit "unterschiedliche" meinst


----------



## thE_29 (14. Jan 2005)

Es sollte immer 1.00 stehen, da double ja immer Nachkommastellen hat!


----------



## KSG9|sebastian (14. Jan 2005)

aber bei division von 2 ganzzahlen wird intern mit integer gerechnet...hab ich zumindest gelesen


----------



## mic_checker (14. Jan 2005)

wo hast du das gelesen? 

Also bei mir kommt auch 1.0 in beiden Fällen raus. Es würde mich eigentlich wundern wenn der Compiler intern mit 1 rechnet, anstatt mit 1.0 etc.

Wenn du anstatt 1 und 1 die Werte 1 und 2 holst, müsste demnach ja 0 rauskommen - wenn tatsächlich mit ints intern gerechnet wird.
Aber es kommt ja 0.5 raus.

Mir würde auch kein plausibler Grund dafür einfallen warum der Compiler das intern so umrechnen würde. 

Aber ich lass mich da gerne eines besseren belehren.


----------



## KSG9|sebastian (14. Jan 2005)

du hast mich n bissl falsch verstanden...wenn ne ganzzahl rauskommt dann rechnet er es meines wissens in nen Integer um. hab ich mal irgendwo gelesen, lasse mich aber auch eines besseren belehren.

bei folgendem


```
double x = 4;
int y=3;

double z = y/x;

System.out.println(z);
```

kommt auch 0 raus, da das ergebniss zuerst berechnet wird, dann als integer gespeichert (hier, weil ne int-var dabei ist) und dann in double gespeichert, aber nicht gecastet, dass muss man auch explizit casten:


```
double x = 4;
int y = 3;

double z = (double)y/x;

System.out.println(z);
```

Dann kommt 0.75 raus

//Edit: ups..


----------



## mic_checker (14. Jan 2005)

Bei mir kommt in beiden Fällen 0.75 raus


----------



## KSG9|sebastian (14. Jan 2005)

bei mir nicht..mit jdk1.3..komischer weiße


----------



## mic_checker (14. Jan 2005)

hab 1.4 - vielleicht war das "früher" tatsächlich so. Vielleicht kann jemand mit Java 5 mal was dazu posten 

Das "Verhalten" das du beschrieben hast, würde für mich eigentlich wenig Sinn machen, aber ich glaube dir, dass bei dir tatsächlich 0 rauskommt 

*waiting for Tiger User to post* *G*


----------



## thE_29 (14. Jan 2005)

Also ich hab auch 1.4 und warum arbeitest du noch mit 1.3...


----------



## Illuvatar (14. Jan 2005)

*tigeruserpost*
Zweimal 0.75


----------



## KSG9|sebastian (14. Jan 2005)

berufsschulrechenr und mein wsad läuft mit 1.3


----------



## thE_29 (14. Jan 2005)

achso 

dachte ich bin mit meiner 1.4er schon veraltet, aber dann


----------

