Java: Warum ist int kleiner als float?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

int verwendet alle Bits zum Speichern der Zahl selbst, reicht also von -2^31 bis 2^31 - 1

float teilt seine Bits in 3 Teilbereiche ein: Vorzeichen (Sign), Exponent und Mantisse. 

Die Aufteilung sieht dabei so aus:

S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

Berechnet wird die Zahl dann mit einer Formel, die (vereinfacht) so aussieht:

M * 2^E

So kann zwar eine große Spanne an Zahlen dargestellt werden, aber die Genauigkeit bei großen Zahlen lässt natürlich nach. Wenn die Mantisse beispielsweise 5.43783 ist und mit 10^15 multipliziert wird, hast du 543783, gefolgt von 10 Nullen. float kann aber nichts genaueres über diese Nullen sagen.

Andersrum, wenn man sehr kleine Zahlen hat (negativer Exponent), verschiebt sich diese Mantisse natürlich hinter die Kommastelle und die Zahl wird umso genauer.

Hallo als Anfänger solche Fragen zu haben zeigt, dass du tatsächlich versuchst die Materie zu verstehen. Dafür schon einmal ein dickes Lob.

Grundsätzlich hast du recht. Int benutzt den ganzen Wertebereich für die Ganzzahl. Also kann alles zwischen −2^31 bis 2^31 − 1 dargestellt werden.

Bei float ist es ein wenig anders, da wie du richtig erkannt hast ja auch noch die Nachkommastellen speichern musst. Die 32 bit unterteilen sich in 1 Bit für das sign-bit. 8 Bit für den Exponenten und 23 Bit für die Mantisse.

die darstellbaren Zeichen berechnen sich also im Grunde wie folgt:

Zahl die in der Mantisse gespeichert ist * 2 (Weil + und -)^ Exponent

So entsteht dann der von dir angegebene Zahlenraum.

Lg Julian

Also das liegt daran wie diese Datentypen abgespeichert werden. Der Integer mit 32bit kann von 0 bis 4.294.967.295 oder 2^32 zählen. Wenn man ein Vorzeichen auch noch berücksichtigt verschiebt sich der Wertebereich zu den von dir genannten -2.147.483.648 bis 2.147.483.647.

Gleitkommazahlen werden jedoch anders gespeichert. Hier ist in der Regel 1bit für das Vorzeichen v reserviert und die Zahl wird als Produkt von Mantisse(23bit) m und Exponent(8bit) e berechnet. X=(-1)^v * m * 2^e

Dadurch lassen sich mit Gleitkommazahlen deutlich größere Zahlen darstellen.



Du verwechselst Anzahl der Zahlen und der Spanne zwischen höchster und niedrigster Zahl