(x+1)-x=0

Amen

Mitglied
Hallo :)

Ich hab hier folgende Aufgabenstellung:
Wie gesehen ergibt sich fur den Datentyp float

8.0 * 10^12 + 42 = 8.0 * 10^12

Dies kann man so interpretieren, dass es bei der Darstellung von Gleitpunktzahlen
Lücken gibt, d.h. einige ganze Zahlen lassen sich nicht exakt darstellen, obwohl es
größere ganze Zahlen gibt, die sich sehr wohl exakt darstellen lassen.

Schreiben Sie ein Java-Programm, das den kleinsten Wert x vom Datentyp float
bestimmt, so dass (x+1)-x=0 gilt.
Wiederholen Sie das Experiment mit dem Datentyp double.
Sie werden feststellen, dass Sie bei naiver Vorgehensweise sehr lange auf die Antwort
Ihres Programms warten müssen. Wie könnte man das Programm beschleunigen?
Wie kann man den Wert, den Ihr Programm ausgibt, theoretisch vorhersagen?

Ich hab schon viel ausprobiert, aber ich komme beim besten Willen nicht drauf, wie das Programm aussehen soll ???:L

Ich hoffe auf Tipps :)
 

Marco13

Top Contributor
Spontaner, erster Gedanke: Binäre Suche
x = 0 -> Geht nicht
x = Float.MAX_VALUE -> Geht
Mitte:
x = Float.MAX_VALUE * 0.5 -> Angenommen, das geht
Mitte:
x = Float.MAX_VALUE * 0.75 -> ...

Vielleicht geht's auch geschickter...
 

KSG9|sebastian

Top Contributor
Um aus der FAQ zu zitieren:

Ark hat gesagt.:
Jein. Eine Dezimalzahl ist nur dann exakt als Gleitkommazahl darstellbar, wenn die Anzahl der zur Darstellung benötigten Binärstellen klein genug ist (siehe Frage B.4 und Frage B.6). Bei irrationalen Zahlen wie Pi oder Wurzel aus 2 kann diese Bedingung niemals erfüllt werden. Eine rationale Zahl q = x/y (maximal gekürzt) hat genau dann endlich viele binäre Nachkommastellen, wenn y eine Zweierpotenz (1, 2, 4, 8, 16, …) ist, sonst eben nicht.
Quelle:
http://www.java-forum.org/allgemein...uble-float-gleitkommazahlen-alternativen.html

D.h. vielleicht kommst du über die Binärdarstellung weiter...
 

Neue Themen


Oben