Float und double

.maik.

Bekanntes Mitglied
Nabend..
ich habe nur eine kurze Frage. Ich verstehe nicht was mit der Genauigkeit und der Wertbegrenzung von Dezimalzahlen gemeint ist. Bei Float soll die Genauigkeit bei 8 Stellen liegen und bei double 17. Aber beide Datentypen koennen weit aus groessere Zahlen darstellen.
Kann mir das einer erklären?
 
Das bezieht sich auf die Anzahl der Stellen für den Exponenten. Schau dir an wie Gleitkommazahlen binär darstegstellt werden.
 
Naja, nicht direkt nur des Exponenten. Ein float kann z.B. (!) eine Zahl wie
10000001
""genau"" darstellen, aber eine Zahl wie
10000000000000001
eben nicht, da wird nur 1e16 gespeichert. Umgekehrt kann auch eine Zahl wie
0.1000001
"genau" dargestellt werden, aber
0.0000000100000001
ist nur 1e-8.

("genau" abgesehen von "kleinen" darstellungsbedingten Ungenauigkeiten)

EDIT: Ungenaue (sic) Darstellung korrigiert
 
Zuletzt bearbeitet:
Nabend..
ich habe nur eine kurze Frage. Ich verstehe nicht was mit der Genauigkeit und der Wertbegrenzung von Dezimalzahlen gemeint ist. Bei Float soll die Genauigkeit bei 8 Stellen liegen und bei double 17. Aber beide Datentypen koennen weit aus groessere Zahlen darstellen.
Kann mir das einer erklären?

Hm, das stimmt eben nicht dass die grössere Zahlen darstellen können

Sagen wir mal wir haben vier Stellen zur Verfügung eine davon brauchen wir für den Exponenten (sonst muss ich zu viel tippen ;-) )

1'000'000 wird gespeichert als 1.00 Millionen (1.00 * 10^6)
1'004'999 wird gespeichert als 1.00 Millionen

Somit währe also 1'000'000 gleich viel wie 1'004'999

Leider rechnet die Bank mit genügend grosser Genauigkeit sonst ging ich sofort hin ;-)
 
Zuletzt bearbeitet:
wo haben wir denn 4 stellen zur Verfügung. Und meine Frage war ja war ja warum float - 3.4E+38 bis +3.4E+38 darstellen kann aber nur eine Genauigkeit von 8 stellen hat. das ergibt doch keinen sinn. die zahl nimmt hat doch viel mehr stellen.
 
Zuletzt bearbeitet:
jaa da lerne ich momentan java und meine frage kam ja daher, aber da steht ja : "Der Datentyp float hat 23 Bit für die Genauigkeit. (Die restlichen der 32 Bit werden verwendet, um die Größe der Zahl anzugeben.)" Und das verstehe ich nicht. Was ist die Genauigkeit.
 
Zuletzt bearbeitet:
float: Mantise 23 => 2^23 = 8388608 dadurch Genauigkeit ~7 bei Stellen

double: Mantise 52 => 2^52 = 4503599627370496 dadurch Genauigkeit ~15 bei Stellen
 
Hm. Von den 32 bit werden einige (23) verwendet, um die "relevanten Stellen der Zahl" zu speichern. Und diese 32 bit reichen für eine Zahl, die ca. 8 Stellen hat. Der Rest ist der Exponent, der nur die Größe der Zahl ändert, aber nicht die "relevanten Stellen".

Z.B.: Relevante stellen (gespeichert in den 23 bit):
12345678
Durch die Wahl des Exponenten kann das nun für
12345678000000000000000000000000
stehen, oder für
0.0000000000000000000000012345678
aber mehr als 8 relevante Stellen können nicht gespeichert werden. Sowas wie
12345678900000000000000000000000
oder gar
12345678000000000000000000000009
geht also NICHT.
 

Neue Themen


Zurück
Oben