kleine verständnisfrage ...



  • hallo

    ich bin neu und habe gerade erst angefangen c zu lernen.
    mir ist auf gefallen, dass ein float 'nur' 32 Bit hat.
    ein long hat auch 32 bit kann aber keinen so großen wertebereich abdecken ...
    wie geht das denn ???

    long = 2147483647
    float = 3.4 * 10 hoch 38 ???????????????????????

    float hat doch 7 Bit präzision und 1 bit '-' oder nicht '-'!
    da fallen doch schon mal 8 bit weg oder nicht ...
    also würde doch nur noch 24 bit bleiben ... so um die 16 mio. max also ...

    ich hoffe jemand findet eine antwort und kann mich aufklären ... danke



  • Der Wertebereich bei float ist zwar von der Ausdehnung her groß, aber nicht überall gleichmäßig dicht. Wenn du bei 10^38 die Mantisse um 1 Bit veränderst, ergibt das ja gleich eine Änderung irgendwo in der Größenordnung von 10^31 ... (mal davon ausgehen, dass float 7 signifikante Stellen hat). Bei 10^-38 hast du dagegen eine Auflösung um 10^-45 ...



  • und was heisst das jetzt klartext ?
    soll das etwa heissen, dass wenn ich eine float zahl hab sie ein bisschen abweichen kann ???
    und wie ist das überhaupt möglich ???



  • soll das etwa heissen, dass wenn ich eine float zahl hab sie ein bisschen abweichen kann ???

    Abweichen wovon?

    Was willst du eigentlich genau wissen? Den Aufbau von float?



  • nein.
    ich will wissen wie es möglich ist mit 32 Bit einen so großen bereich abzudecken !
    (wenn möglich in verständlicher sprache ... also so dass ich es auch verstehe)

    danke



  • Ich machs per Analogie. Stell dir vor, du hast einen Ganzzahltyp, der 4 Dezimalstellen darstellen kann. Es geht also von 0000 bis 9999. Jetzt kannst du aber mit 4 Dezimalstellen auch anders, als Fließkommatyp, arbeiten, indem du z.B. sagst, die vierte Stelle wird als Exponent interpretiert. Also XXXY soll heißen X,XX * 10^Y. Beispiel: Die Zahl 1 wird als "1000" dargestellt (1,00 * 10^0). Die 534 ist "5342" (5,34 * 10^2). Maximal möglich ist "9999", das entspricht 9,99*10^9, also 9990000000. Du kannst aber, weil du für die Mantisse nur 3 Ziffern bereit hältst, die Zahl 99910000000 gar nicht bzw. nur gerundet darstellen. Die Ausdehnung des Wertebereichs ist viel größer als bei der Ganzzahlvariante mit 4 Ziffern, aber du kannst insgesamt nicht mehr Zahlen darstellen.
    Bei float hast du 23 Bits Mantisse, 8 Bit Exponent und 1 Bit für das Vorzeichen.



  • jetzt hab so gar ich es verstanden ...

    dickes fettes danke ...



  • Bashar schrieb:

    Bei float hast du 23 Bits Mantisse, 8 Bit Exponent und 1 Bit für das Vorzeichen.

    Hi Bashar - weißt Du, ob das verbindlich ist für ANSI C?

    Hatte schon mit anderen Float- Darstellungen zu tun, aber eben nicht unter C ...



  • das ist vielleicht prozessorabhaengig



  • das eine IEEE definition für FloatingPoint Zahlen IMHO



  • hephaistos6 schrieb:

    das eine IEEE definition für FloatingPoint Zahlen IMHO

    👍
    IEEE-754 um genau zu sein (wir mussten das mal In- und Auswendig lernen mit Wertebereichen, Sonderfaellen und so, echt toll 🙄 ). Gilt afaik bei allen Intel-kompatiblen-Systemen, Mac und einigen Unix-Kisten.


Anmelden zum Antworten