/*
Datei............: Aufg0420.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 18.10.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 04.20
Kommentare.......:

Auch bei der erweiterenden Konvertierung von primitiven 
Datentypen können Datenverluste oder -verfälschungen 
auftreten. Zwar hat der jeweils größere Datentyp einen
breiteren Wertebereich, aber seine Darstellungsgenauigkeit 
ist unter Umständen kleiner als die des kleineren 
Datentyps. 

Bei der Konvertierung von int nach float wird dies besonders
deutlich, denn ein float stellt Fließkommazahlen lediglich
mit etwa 7-stelliger Genaugkeit dar. Ganzzahlen mit 8 oder
mehr Stellen, die ja mit einem int noch bequem dargestellt 
werden können, kann ein float nicht mehr genau speichern. 
Zwar bleibt die Größenorndung des Werts erhalten, aber
die niederwertigen Ziffern werden ungenau.

Das folgende Programm demonstriert dieses Problem anhand
einer Schleife, die einen int-Zähler i von 0 beginnend 
solange um 1 erhöht, bis der in ein float konvertierte
Wert i mit dem in einen float konvertierten Wert i + 1
übereinstimmt. Die Ausgabe ist also der kleinste mit
dem Datentyp float darstellbare ganzzahlige Wert, der nicht 
mehr von seinem direkten Nachfolger zu unterscheiden ist.
Bei größeren Werten werden natürlich auch die 
"Lücken" zwischen unmittelbar aufeinanderfolgenden
float-Werten größer.

Das Programm läuft etwa eine halbe Minute auf einem
Pentium-133 unter Windows 95, wenn es mit dem JDK 1.1.2
übersetzt wurde.
*/
public class Aufg0420
{
  public static void main(String args[])
  {
    for (int i = 0; i < Integer.MAX_VALUE; ++i) {
      if (i % 100000 == 0) {
		System.out.print(".");
		System.out.flush();
      }
      float x1 = i;
      float x2 = i + 1;
      if (x1 == x2) {
		System.out.println();
		System.out.println("(float)" + i + " == " + "(float)" + (i + 1));
		break;
      }
    }
  }
}

