Gleitkommadarstellung

  • Hallo,

    bin neu hier, hoffe das passt hier rein.

    Hab da ein Problem:

    Sind die Zahlen a=2.0, b=4.0, c=65536.0 und d=8388608 exakt darstellbar ?
    Wenn ja soll man die 32-Bit-Darstellung angeben.

    Aber woran erkennt man welche Zahlen exakt und welche nicht exakt darstellbar sind ?

    Hoffe mir kann jemand helfen:o

    Danke

  • Hmm...ich kenn mich auch nicht gut aus....aber ich glaube mit den Cast-Umwandlungen (z.B. in C/C++) kannst auch mit unterschiedlichen Typen rechnen wenn du das meinst...ergo somit sind (die Ergebnisse) exakt darstellbar. Von welcher Syntax gehst du aus?

  • Hmm...ich kenn mich auch nicht gut aus....aber ich glaube mit den Cast-Umwandlungen (z.B. in C/C++) kannst auch mit unterschiedlichen Typen rechnen wenn du das meinst...ergo somit sind (die Ergebnisse) exakt darstellbar. Von welcher Syntax gehst du aus?


    Es gibt Dezimalzahlen, die nicht exakt als Binärzahlen darstellbar sind (versuch doch mal z.B. 0,1[t]10[/t] ins binäre Zahlensystem umzurechnen ;) ). Da Computer aber alles als Binärzahlen speichern, kann es zu Ungenauigkeiten kommen (speziell bei der Gleitkommadarstellung).

  • also ich verstehe nicht ganz worum es in dem thread geht, klar gibts ne genauigkeitsbegrenzung bei der xten nachkommastelle, genauso wie ein int max ~2 milliarden als zahl speichern kann

    man hat verschieden große variablen (1 byte, 4 byte, etc) und das wird halt binär so und so kodiert je nachdem ob die zahl positiv, negativ oder mit nachkommastellen ist

    die zahlen die du da alle angegeben hast, ja die sind exakt darstellbar, bzw passen locker in 32 bit variablen rein ohne dass man was wegschnippeln müsste am nachkomma oder sie den wertebereich überschreiten


    ka was die "32 bit darstellung" ist, 32 bit ist einfach der speicher den die variable zur verfügung hat, kann sein dass damit gemeint ist wie eine kommazahl in binär mit 32 bit aussieht

    wie man das umrechnet weiß ich jedenfalls längst nicht mehr... vielleich findest du da was
    http://en.wikipedia.org/wiki/Binary_numeral_system#Decimal

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • OK, ich muss wohl doch genauer werden ....

    Rechnen wir ein Beispiel durch:
    Wir möchten die Zahl 2.0 als IEEE single precision Gleitkommazahl speichern. Uns stehen 32 Bit zur Verfügung:
    0 00000000 00000000000000000000000

    1) Vorzeichen: positiv, Vorzeichenbit bleibt also 0.
    2) Exponent: Zuerst wird die Zahl ins Binärformat umgerechnet: 2.0[t]10[/t] => 10.0[t]2[/t]. Das Komma der Binärzahl wird so verschoben, dass alle Stellen bis auf den ersten 1er nach dem Komma stehen => Exponent = 1[t]2[/t]. Jetzt noch den Bias (127[t]10[/t]) addieren, dann bekommen wir:
    0 10000000
    3) Mantisse: Jetzt noch die Nachkommastellen in die Mantisse schreiben (in unserem Fall bleibt da nur eine 0 übrig):
    0 10000000 00000000000000000000000

    Wir sehen also: Wir können die Zahl 2.0 exakt speichern.


    Jetzt zu meinem erwähnten 0,1[t]10[/t] Beispiel:

    1) Vorzeichen: positiv, Vorzeichenbit bleibt also 0.
    2) Exponent: Zuerst wird die Zahl ins Binärformat umgerechnet: 0,1[t]10[/t] => 0,00011001100110011001100110011...[t]2[/t]. Das Komma der Binärzahl wird so verschoben, dass alle Stellen bis auf den ersten 1er nach dem Komma stehen => Exponent = -100[t]2[/t]. Jetzt noch den Bias (127[t]10[/t]) addieren, dann bekommen wir:
    0 01111011
    3) Mantisse: Jetzt noch die Nachkommastellen in die Mantisse schreiben:
    0 01111011 10011001100110011001100

    Und das ist jetzt sicher nicht exakt abgespeichert, wenn wir nämlich zurückrechnen kommen wir auf:
    0,099999994039535[t]10[/t]

    P.S.: Ich habe aus Bequemlichkeit diesen Umrechner verwendet, das Ganze ist zu Fuß halt etwas mühsamer, aber genauso schaffbar.


  • Sind die Zahlen a=2.0, b=4.0, c=65536.0 und d=8388608 exakt darstellbar ?


    Nachsatz: Da diese Zahlen alle 2er Potenzen sind (ich Dummer sehe das erst jetzt) und d nicht den Exponent sprengt (ist nur 2^23), sind alle diese Zahlen exakt darstellbar.

  • Nachsatz: Da diese Zahlen alle 2er Potenzen sind (ich Dummer sehe das erst jetzt) und d nicht den Exponent sprengt (ist nur 2^23), sind alle diese Zahlen exakt darstellbar.

    <klugscheiß>

    Ganz allgemein: Ein Rechenwerk, das im Binärsystem arbeitet, kann alle Zahlen genau darstellen, die als endliche Summe von Zweierpotenzen darstellbar sind (wenn man davon ausgeht, dass beliebig viele Ziffern zur Darstellung der Zahl verwendet werden können).

    Oder noch allgemeiner: Ein Rechenwerk, das im Zahlensystem mit der Basis b arbeitet, kann alle Zahlen genau darstellen, die als endliche Summe von Potenzen von b darstellbar sind.

    </klugscheiß>

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!