Floatingpoint Addition (Single Precision)



  • Hallo,

    ich schreibe morgen mein Exam und bis eben dachte ich eignentlich das ich es verstanden habe.

    Leider sind zu viele Fehler in den Folien das es schon garkeinen Sinn mehr ergibt.

    zb

    123 + (-3,75)

    123 => binär 0111 1011

    3,75 => binär 11,11

    dann normalisiere ich beide binär werte

    1,111011 * 2^6 (123)
    1,111 * 2^1 (-3,75)

    dann gleiche ich den exponenten an

    1,111 *2^1 -> 0,00001111 * 2^6

    Was muss ich nun machen ?
    Muss ich das zweier Komplement von 0,00001111 * 2^6(-3,75) bilden ?

    zb 0,00001111 * 2^6 ->(zweier Komplement)-> 1,11110000 +1 -> 1,11110001 *2^6 ?



  • Dann musst du die Addition durchführen - wie du das machst bleibt dir überlassen.

    Wenn du die Addition im Zweierkomplement durchführen willst, dann musst du die Zahlen natürlich erstmal von Sign + Magnitude ins Zweierkomplement überführen.

    Also...

    Ausgangswerte:

    sign = 0 (+) magnitude = 1,11101100 * 2^6
    sign = 1 (-) magnitude = 0,00001111 * 2^6

    Beim Überführen ins Zweierkomplement dürfen wir aber keine Information verlieren, daher benötigen wir zwei Vorkommastellen - sonst würde ja die Information über das Vorzeichen verloren gehen.

    Im Zweierkomplement:

    01,11101100 * 2^6
    11,11110001 * 2^6

    Zusätzlich brauchen wir Headroom für Ergebnisse die ein Bit mehr brauchen als die (betragsmässig) grössere der beiden Zahlen. Also 3 Vorkommastellen (vorzeichenbehaftet erweitern d.h. erstes Bit verdoppeln).

    Im Zweierkomplement mit Headroom:

    001,11101100 * 2^6
    111,11110001 * 2^6

    Das können wir jetzt addieren, wobei wir das Overflow Bit einfach wie üblich wegwerfen:

    001,11101100
    111,11110001
    ------------
    001,11011101
    

    Also Ergebnis im Zweierkomplement = 001,11011101 * 2^6

    Das müssen wir jetzt wieder nach Sign + Magnitude zurückübersetzen.
    In diesem Fall trivial, da die Zahl Positiv ist (erste Stelle = 0).

    sign = 0 (+) magnitude = 001,11011101 * 2^6

    Jetzt noch normalisieren - in diesem Fall auch trivial, wir müssen nur die führenden Nullen streichen.

    sign = 0 (+) magnitude = 1,11011101 * 2^6

    Fertig.

    Zur Kontrolle nach dezimal zurückgerechnet...

    1,11011101 * 2^6
    = 111011101 * 2^-2
    = 477/4
    = 119,25
    = 123 + (-3,75)
    Juchui :)
    

Anmelden zum Antworten