Eine gute Antwort wäre:

12+4 > 16 5.2-1.2 <= 2.0+22*3-4 == 1+1
false true true

Gefahr bei dem Vergleich von Double-Werten

Was glauben Sie ist das Ergebnis des Booleschen Ausdrucks:

4.0/3.0 == 1.0 + 1.0/3.0

Vermutlich denken Sie, dass er wahr ist. Vermutlich ist er es. Aber nicht sicher. Gleitpunkt-Arithmetik ist nicht exakt. Sie sollten niemals einem exakten "Ist-Gleich" Vergleich bei Gleitpunktzahlen trauen. Das Problem besteht darin, dass manche Zahlen eine unbegrenzte Anzahl von Bits benötigen, um exakt dargestellt werden zu können. Für diese Zahlen ist selbst ein 64-Bit double nicht exakt.

Sie sind mit dieser Situation was die Papier-und-Bleistift-Arithmetik betrifft vertraut. Zum Beispiel, ist das folgende wahr?

1.0/3.0 == 0.3333333

Es ist nicht wahr, da die Dezimalzahl auf der rechten Seite nur eine Annäherung ist. Bei mehr Dezimalstellen wird die Annäherung besser, aber sie ist niemals gleich dem Bruch. Das gleiche passiert bei Java (und allen anderen Programmiersprachen). Zum Beispiel, das folgende könnte falsch ergeben:

1.0/10.0 == 0.1

Manchmal, wenn unzweifelhafte Genauigkeit gebraucht wird, wird Ganzzahl-Arithmetik verwendet. Das ist einer der Gründe, warum Java über 64-Bit long Ganzzahlen verfügt.

FRAGE 5:

Was ist die Ausgabe des folgenden:

import java.io.*;
class DezimalBruch
{
  public static void main (String[] args) throws IOException
  {
    float x = 1.0f;
    float y = 10.0f;

    if ( x/y == 0.1 )
      System.out.println("Kuchen kaufen!"  );
    else
      System.out.println("Kein Kuchen heute.");
  }
}
Inhaltsverzeichnis