Skip to Content

16. Erste ganze Zahl größer Null die man noch mit int darstellen kann aber nicht mit float Typen

Was ist die erste ganze Zahl größer Null, die man noch mit dem Typ int darstellen kann aber nicht mit dem Typ float?

Geben Sie eine Erklärung die auf dem Zahlenformat der beiden Typen basiert.

Schreiben Sie ein Programm welches diesen Wert berechnet.

Diese Frage ist für Klausuren etwas zu schwer...

Niveau 1
Schwierigkeitsgrad schwer
Zeit

10 Minuten (Herleitung)
15 Minuten (Programmentwicklung)

Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)

Antwort zu Frage 15. char versus short

  1. Im Wertebereich vom short aber nicht im Wertebereich von char : -1
  2. Im Wertebereich von char aber nicht im Wertebereich short: (215 -1) + 1 = 215 = 32768
    1. Herleitung: Größte Wert von short: 215-1. Dann noch mindestens 1 addieren.

Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)

Antwort zu Frage 16.: Erste ganze Zahl größer Null die man noch mit int darstellen kann aber nicht mit float Typen

16777217

Erklärung

Der Typ int kann alle ganzen Zahlen bis 231-1 darstellen (Siehe)

Der Typ float kann alle ganzen Zahlen darstellen solange der Exponent 20 ist. Wird der Exponent zu 21,  kann der Typ float nur noch jede zweite Zahl genau darstellen.

Der größte Wert den man im Typ float in der Mantisse beschreiben kann ist hat alle 23 Bits gesetzt. Der Wert is also 224-1=16777215.

float kann also noch (224-1)*20 = 16777215 darstellen.

Der nächste Wert kann float auch noch darstellen: 224=16777216. Hier wird ein größerer Exponent verwendet und eine 1 steht in der Mantisse.

Die nächste Zahl 16777217 kann aber von float nicht mehr dargestellt werden. Der Exponent muss größer als 20 sein, da die Mantisse nicht mehr ausreicht. Ist der Exponent aber 21 kann man nur noch jede zweite Zahl genau repräsentieren. Ist der Exponent 22, kann man nur noch jede vierte Zahl genau repräsentieren.

Eine mögliche Implementierung

package javafrage;

public class IntVersusFloat {

public static void main(String[] args) {
int i=0;
float j=0.0f;
while (i==(int)j) {
j++;
i++;
}
System.out.println("i: "+i+", j: "+j);
double k = (int)Math.pow(2, 24);
System.out.println(k);
}
}



blog | by Dr. Radut