ANSI C Datentyp "float". Wie viele Nachkommastellen kann man maximal definieren?
"float" hat doch 32 Bit, also 2^32 stellen, korrekt? Wieviele Nachkommastellen kann man demnach dann definieren?
2 Antworten
Hei :)
nein, so funktioniert das nicht. Die höchste Zahl, die du mit dem float ausgeben kannst ist die 2^32 - und das ohne Nachkommastellen.
2^32 = 4 294 967 296
das heißt, mit Komma sollte es etwa auf 4, 294 967 296 also rund 9 Nachkommastellen hinauslaufen. Ich weiß leider nicht, inwiefern das Komma als Zeichen relevant ist (funktioniert evtl. wie -/+). Aber mehr als 9 Nachkommastellen wirst du nicht kriegen, eher weniger.
Ach Gott, ja natürlich hat es nicht die 2^32 STELLEN sondern der Bereich ist 2^32 (/.-) Facepalm
Ich denke du hast ein grundlegend falsches Verständnis davon, wie Gleitkommazahlen dargestellt werden. Ein float hat zwar 32 Bit, ja, das hat aber erstmal nichts mit der Anzahl der darstellbaren Nachkommastellen zu tun.
Die 32 Bit teilen sich auf in
- Vorzeichenbit
- Exponent
- Mantisse
für die Darstellbarkeit der gültigen Ziffern ist die Mantisse zuständig. Bei einem float sind das 23 bit, was 7-8 gültigen Ziffern entspricht. Bedenke dabei, dass 7-8 gültige Ziffern nichts mit Nachkommastellen zu tun hat.
Man kann also beispielsweise die Zahl
0,000000000000000342
sehr gut darstellen, obwohl sie viele Nachkommastellen hat (weil führende Nullen in den Exponent wandern). Gleichzeitig wird aber eine Zahl wie
123532345363
gerundet werden müssen, da sie mehr als 7 oder 8 Ziffern hat
Demnach ist es egal wieviele Nachkommastellen man hat, es kommt also nur auf die signifikanten Stellen an?
Das Ganze ist in diesem Standard https://de.wikipedia.org/wiki/IEEE_754 definiert. Ansonsten hast du alles geschrieben, was ich auch in meine Antwort reinbringen wollte. :)