Division mit float und double

Status
Nicht offen für weitere Antworten.

waste

Mitglied
Hallo,

mein Kollege hatte beim Dividieren von 2 double-Werten unter C++ komische Fehler bekommen (Ergebnis war nicht exakt).
Mit einem Lächeln :cool: wollte ich ihm zeigen, das Java damit keine Probleme hat und stand recht blöde da :shock: , als ich folgendes Programm ausführte:

Code:
public class Rechnen
{
    public static void main(String[] args)
    {
        System.out.println("1.1d / 0.1d = " +  1.1d / 0.1d);
        System.out.println("1.1f / 0.1f = " +  1.1f / 0.1f);        
        System.out.println("1.1f / 0.1d = " +  1.1f / 0.1d);
        System.out.println("1.1d / 0.1f = " +  1.1d / 0.1f);
        System.out.println("");
        System.out.println("1.2d / 0.1d = " +  1.2d / 0.1d);
        System.out.println("1.2f / 0.1f = " +  1.2f / 0.1f);
        System.out.println("1.2f / 0.1d = " +  1.2f / 0.1d);
        System.out.println("1.2d / 0.1f = " +  1.2d / 0.1f);
        System.out.println("");
        System.out.println("1.0d / 0.5d = " +  1.1d / 0.5d);
        System.out.println("1.0f / 0.5f = " +  1.1f / 0.5f);
        System.out.println("1.0f / 0.5d = " +  1.1f / 0.5d);
        System.out.println("1.0d / 0.5f = " +  1.1d / 0.5f);
    }
}

Es dividiert "double durch double", "float durch float" und auch float und double gemischt.
Ich habe immer mal andere Zahlen eingesetzt und als Ausgabe liefert es:

Code:
1.1d / 0.1d = 11.0
1.1f / 0.1f = 11.0
1.1f / 0.1d = 11.000000238418579
1.1d / 0.1f = 10.99999983608723

1.2d / 0.1d = 11.999999999999998
1.2f / 0.1f = 12.0
1.2f / 0.1d = 12.000000476837158
1.2d / 0.1f = 11.999999821186067

1.0d / 0.5d = 2.2
1.0f / 0.5f = 2.2
1.0f / 0.5d = 2.200000047683716
1.0d / 0.5f = 2.2

Wie kommen denn nun diese Zahlen zustande?
Da bin ich mit Kopfrechnen viel näher am Ergebnis als der Computer ;)

Ne mal im Ernst, kann mir jemand sagen wieso und weshalb und was ich machen kann um solche Sachen zu vermeiden.
Ich meine 2 Kommazahlen zu dividieren ist ja nichts außergewöhnliches...
Ich verstehe es leider nicht :bahnhof:

Mir ist nur aufgefallen, dass es bei "float durch float" keine dummen Fehler gab.
Aber das heißt ja nicht, dass es immer so ist.

Und warum ist "float durch float" genauer, wenn doch float nur eine "Gleitkommazahl" darstellt und double sogar eine "doppeltgenaue Gleitkommazahl" ... ist double am Ende zu genau :lol:

Danke für die Erkläungen
waste
 

Lim_Dul

Top Contributor
Das hat mit der internen Speicherung der Zahlen zu tun: http://de.wikipedia.org/wiki/Gleitkommazahl

Man kann mit n Bits nun mal nur 2^n verschiedene Zahlen darstellen, daher lässt sich nicht jede Gleitkommazahl mit float oder double darstellen. Es gibt also Lücken, die Darstellung ist außer in Ausnahmefällen nie genau. Beim rechnen vergrößeren sich diese Fehler naturgemäß, so dass man dann meint, falsche Ergebnisse zu bekommen.
Deshalb sollte man float oder double auch nie mit == vergleichen, weil der false liefern kann, obwohl eigentlich true gemeint ist.

Allerdings kann man in Java auch genau rechnen mittels der Klasse BigDecimal. Man sollte da nur aufpassen, nur den String-Konstruktor zu nehmen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Float Division - Nachkommastelle bei 0 ausblenden Allgemeine Java-Themen 2
N Division macht Probleme Allgemeine Java-Themen 14
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
Arif Datentypen Float-Rundungsfehler Allgemeine Java-Themen 5
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
RalleYTN float in WORD konvertieren Allgemeine Java-Themen 1
N OctetString --> Float Allgemeine Java-Themen 5
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
J Datentypen String in Float umwandeln und "umbauen"? Allgemeine Java-Themen 5
M float, double, BigDecimal Allgemeine Java-Themen 5
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
N Variablen Gleitkommazahlen - Kleineres float? Allgemeine Java-Themen 11
P Datentypen float mit komma statt punkt möglich? Allgemeine Java-Themen 6
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
B Variablen Bug of Float. & Double.MIN_VALUE! Allgemeine Java-Themen 4
Tobse 8 bit float Allgemeine Java-Themen 6
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
vandread Float/Double probleme bei der Multiplikation?! Allgemeine Java-Themen 3
Developer_X "String" in "int" umwandeln, und dann "int" in "float" Allgemeine Java-Themen 8
G String nach Float parsen Allgemeine Java-Themen 2
E hex- Stirng in einen float umwandeln Allgemeine Java-Themen 9
MQue Float- Wert formatieren Allgemeine Java-Themen 8
E int vs. float vs. double Allgemeine Java-Themen 7
spacegaier Kommastellen aus float extrahieren Allgemeine Java-Themen 13
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
J Float Formatierung? Allgemeine Java-Themen 6
P string zu float - darstellungsproblem Allgemeine Java-Themen 4
G Verständnisproblem double und float Allgemeine Java-Themen 7
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
W float/double verhält sich seltsam Allgemeine Java-Themen 6
R Float richtig in Integer ? Allgemeine Java-Themen 4
N Float zahl auf eine Stelle nach dem Komma runden Allgemeine Java-Themen 3
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2
H Multiplikation int*float Allgemeine Java-Themen 2
V Typumwandlung Integer, Float etc in String Allgemeine Java-Themen 4
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
Neumi5694 double Vergleich Allgemeine Java-Themen 19
G Modulo - double Allgemeine Java-Themen 21
ReinerCoder Eclipse Fehlermeldung - The constructor Double(double) is deprecated Allgemeine Java-Themen 8
O Variablen Addition von Double-Werten ergibt seltsame 0.9999999 Zahlen Allgemeine Java-Themen 2
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
VfL_Freak Double mit zwei festen NK-Stellen ausgeben Allgemeine Java-Themen 9
B List<Integer> ist List<Double> ? Allgemeine Java-Themen 6
SkyScreamer Variablen Int umwande in Double/ 1 Miner = 5 Cookies/s Allgemeine Java-Themen 2
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
T Double salted bcrypt Allgemeine Java-Themen 0
A Zahl abgerundet obwohl Double Allgemeine Java-Themen 9
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
Y String to Double ohne ParseDouble Allgemeine Java-Themen 11
D Double aus String auslesen Allgemeine Java-Themen 8
M double Array Allgemeine Java-Themen 8
C String in double[][] konvertieren! Allgemeine Java-Themen 5
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
Zettelkasten Double --> Integer Allgemeine Java-Themen 4
J String mit "," in Double Wert konvertieren Allgemeine Java-Themen 7
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
T ArrayList<double[]> persitent anlegen Allgemeine Java-Themen 7
K double Zufallszahl Allgemeine Java-Themen 6
S String in Double - letztes Zeichen fehlt Allgemeine Java-Themen 4
T int <-> integer, double <-> Double... Allgemeine Java-Themen 2
J Umstellung von double auf BigDecimal Allgemeine Java-Themen 5
H2SO3- String 1.000,00 in double umwandeln Allgemeine Java-Themen 12
S Double-Checked Locking Allgemeine Java-Themen 4
I 2D-Grafik Polygon mit Double Werten zeichnen Allgemeine Java-Themen 4
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
F double auf 2 Nachkommastellen runden Allgemeine Java-Themen 9
D Double to Integer - ist das möglich? Allgemeine Java-Themen 3
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
H2SO3- großen double in string mit e umwandeln Allgemeine Java-Themen 4
T Problem: Double als Geldbetrag - Rundungsfehler Allgemeine Java-Themen 5
P große double Zahlen und modulo Allgemeine Java-Themen 8
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
M größer als double? Allgemeine Java-Themen 4
N Double ohne Wissenschaftliche Schreibweiße Allgemeine Java-Themen 5
M Double Braces Notation um Collections zu initialisieren Allgemeine Java-Themen 9
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
T XStream.toXML => double mit , anstelle . Allgemeine Java-Themen 3
G Fehler bei Array.getDouble mit Double[] als Argument! Allgemeine Java-Themen 6
A Problem bei Übergabe von Werten in ein double Array. Allgemeine Java-Themen 21
M Double immer mit 2 Kommastellen Allgemeine Java-Themen 3
G double in Date Allgemeine Java-Themen 5
reibi double-Wert auf 2 Stellen nach dem Komma abschneiden Allgemeine Java-Themen 6
G Genauigkeit von Double Allgemeine Java-Themen 2
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
V "double in Exponentialschreibweise" normal ausgebe Allgemeine Java-Themen 2
S List<Double> oder Double[] in double[] zu konvertieren Allgemeine Java-Themen 6
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
T cast Object to Double[] Allgemeine Java-Themen 2
DEvent double von c nach Java Allgemeine Java-Themen 4
K Double-Zahl runden Allgemeine Java-Themen 4
J double 3.0 soll ohne Nachkommastelle ausgegeben werden Allgemeine Java-Themen 12
S Java Double addieren Allgemeine Java-Themen 3
A string zu double Allgemeine Java-Themen 3
T double to object Allgemeine Java-Themen 3
J Große Zahl (double) as text ausgeben? Allgemeine Java-Themen 2
padde479 String in double parsen Allgemeine Java-Themen 6
E double auf int runden, nicht abschneiden Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben