selfhtml.de - Alles für den Webmaster!

 

Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Anfänger! Float-Zahlen

Autor: RolandScull
Datum: 30.12.2008 16:02:32

Hallo Leuts,

ich arbeite gerade for fun das Open-Book http://openbook.galileocomputing.de/javainsel7 durch.

Da bin ich auf diese Zeilen hier gestossen:
System.out.println( 20000000000f == 20000000000f+1 );

Die Ausgabe gibt "true", was mich wundert, da doch der Wert um 1 erhöht ist, und demzufolge doch eigentlich nicht gleich sein kann.
Ich habe es ausprobiert. Der Wert bleibt solange "true", bis der addierte Wert größer als 1023 wird (bei ganzzahliger Erhöhung des Wertes). Ab 1024 wird die Ausgabe "False".

Kann mir das jemand verklaren?

LG Roland



Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Anfänger! Float-Zahlen

Autor: reporter
Datum: 30.12.2008 17:15:51

Hallo,

> Da bin ich auf diese Zeilen hier gestossen:
> System.out.println( 20000000000f ==
> 20000000000f+1 );
>
> Die Ausgabe gibt "true", was mich wundert, da
> doch der Wert um 1 erhöht ist, und demzufolge
> doch eigentlich nicht gleich sein kann.
> Ich habe es ausprobiert. Der Wert bleibt solange
> "true", bis der addierte Wert größer als 1023
> wird (bei ganzzahliger Erhöhung des Wertes). Ab
> 1024 wird die Ausgabe "False".


Ich habe es mir von einem Java-Heini zirka 10 min erklären lassen. Als Basis dafür hat er http://de.wikipedia.org/wiki/IEEE_754 genommen (die Grafik mit den Farben Rot, Geld und Grün; die sich in der Mitte dieser Seite befindet).

Also ich versuche es einmal:
Stelle dir einen Taschenrechner vor. Dieser zeigt auf dem Display die Zahl '20000-E06'. Dies steht für deine 20000000000. Wenn du jetzt diese Zahl um 1 erhöhst, dann erhälst du wieder '20000-E06'. Dein nächster Versuch sieht mit +999998 aus und du bekämst
'20000-E06'. Hintergrund: Dein Taschenrechner kann die letzten 6 Stellen nicht mehr darstellen, da er ein Limit von neuen Stellen hat. Erhöst du jetzt nocheinmal die Zahl um 1 würdest du dann '20001-E06' bekommen (Anfangszustand + 1 Mill).

Bei 1024 wird dann 20...00 mit 20...01 verglichen und dies erzeugt dann ein 'false'.