mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Festkomma-Artihmetik


Autor: Fabian G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fabian G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, besten Dank!

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.