Forum: Mikrocontroller und Digitale Elektronik Festkomma-Artihmetik


von Fabian G. (Gast)


Lesenswert?

Hallo zusammen

Habe gerade ein Problem bei der Addition zweier Festkommazahlen:

Fixed Point unsigned (4:2): 1101 => 3.25
Fixed Point signed (4,3):   1010 => -0.75

möchte ich miteinander addieren. Da ich aber eine unsigned und eine 
signed Zahl habe, habe ich bei der Ausführung nun meine lieben 
Probleme... Kann mir jemand von euch helfen?


Gruss
Fabian G.

von Franz (Gast)


Lesenswert?

Was genau willst Du wissen?

Wenn die
   1010
ein 4-bit Signed-Integer in Zweierkomplement-Darstellung ist, komm ich 
auf
 -6   (-2^3*sign + 2)
bzw. nach Interpretation von zwei Nachkommastellen auf
 -6/4 = -3/2 = -1.5

von Fabian G. (Gast)


Lesenswert?

Es handelt sich bei beiden um Fix Point Darstellungen. Die Zahlen sind 
folgendermassen zu interpretieren (Stelle des Kommas)

(4,2) 1101 => 11,01
(4,3) 1010 => 1,010


Das Problem hier ist die Addition eines unsigned und eines signed 
Wertes, beide signed oder beide unsigned wären kein Problem.... muss man 
zuerst noch umrechnen?

von ulf (Gast)


Lesenswert?

Wenn ich mich nicht irre, musst du beide Zahlen nach signed konvertieren 
und ins gleiche Format (Länge und Position des Kommas).
Aus der ersten wird dann 011(,)010
und aus der zweiten: 111(,)010
addiert ergibt das 010(,)100 also 2,5 was stimmen sollte.

von Fabian G. (Gast)


Lesenswert?

ok, besten Dank!

von Alban (Gast)


Lesenswert?

@Fabian

Kannst du mal sagen wo du die Notation her hast?

Ich kenne z.B dieses Dokument http://home.earthlink.net/~yatescr/fp.pdf

Hier wird U für Unsigned und A für Signed verwendet. Mit den Zahlen wird 
dann die Anzahl der Bits für Ganzzahligen und Fraktuellen Teil 
Angegeben.

Also z.B. U(3,2) bedeutet Unsigned-Integer mit 3 Bits für Integer und 2 
Bits für Fraktuellen Teil.

Matlab glaube ich nutzt eine S-Notation. s3.2 bedeutet z.B. 
Signed-Integer, 3 Bits für Integer, 2 Bits für Fraktuellen Teil.

Mich würde mal Interessieren ob es da was allgemein gültiges gibt oder 
wieviele verschiedene Notation es gibt?

von Tom (Gast)


Lesenswert?

>Es handelt sich bei beiden um Fix Point Darstellungen. Die Zahlen sind
>folgendermassen zu interpretieren (Stelle des Kommas)
>
>(4,2) 1101 => 11,01
>(4,3) 1010 => 1,010

Beim Addieren müssen die Kommas untereinander stehen, also musst Du eine 
Zahl shiften und dann addieren.

Die Codierung mit unterschiedlicher Anzahl Nachkommastellen für signed 
und unsigned finde ich auch seltsam - sollte man so nicht machen. Was 
passiert wenn Du z.B. beim Inkrementieren von Minus nach Plus kommst? 
Nach jeder Operation checken, ob plus oder minus und danach Formate 
umrechnen?

von josef (Gast)


Lesenswert?

@ ulf
Alles schön und gut, das mit der Addition. Aber wie hast du den unsigned 
Wert in signed umgewandelt? 2er Komplement?
Wenn beide signed sind, werden beide Werte negativ, d.h. das Resultat 
müsste in signed -4 sein... oder liege ich da falsch?

Grüsse aus Köln

von Karl H. (kbuchegg)


Lesenswert?

Ich denke die Annahme ist gerechtfertigt, dass ein
unsigned Wert vom Prinzip her immer positiv ist.

ulf hat ganz einfach links 1 Bit dazugenommen, damit
er den Wertebereich von unsigned in signed ausdrücken
kann, ohne das irgendetwas negativ wird.

Damit er aber wieder gleich viele Stellen hat, hat auch
die signed Zahl links 1 Stelle dazubekommen, die in diesem
Fall allerdings 1 sein muss, weil ja die Ausgangszahl auch
schon negativ war.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.