-0,x im 2er Komplement

Gast #3512236
Lesenswert?
• ▲
▼
Hallo,

ich möchte für eine FFT-Realisierung auf einem FPGA mit Festkommazahlen 
im Zahlenbereich -1<= x <= 1 multiplizieren.

Leider ist mir nicht klar wie es möglich ist z.B. -0,25 darzustellen.

0,25 wäre ja z.B. mit 4,4 bit :

0000 0100

Aber wie komme ich jetzt das negative Vorzeichen hin?

Grüße und Danke
Patrick
Gast #3512257
Lesenswert?
• ▲
▼
Hi,

das habe ich auch so gemacht.

Möchte ich mir jetzt die Vorkammastelle anzeigen lassen, komme ich auf

1111 = (-1)

oder?

Bzw. heißt das, dass ich mir die Vorkommastelle gar nicht einzeln 
anschauen kann, sondern erst die ganze Festkommazahl zurückwandeln muss?

Gruß
Patrick
Gast #3513965
Lesenswert?
• ▲
▼
Das hängt von deiner Definition für "Vorkommastelle" ab. Die hinteren 
vier Bit abzuschneiden bedeutet eben Abrunden auf die nächstkleinere 
ganze Zahl. Wenn da 1 herauskommt, heißt das, der genaue Wert lag 
zwischen 1 und 2. Kommt 0 heraus, lag der genaue Wert zwischen 0 und 1. 
Und für Werte zwischen -1 und 0 kommt eben  -1 heraus. Ist ja auch 
logisch, die 0 hätte ja sonst einen doppelt so großen Einzugsbereich wie 
alle anderen Ergebnisse.
Lösung: -1 als -0 ausgeben, -2 als -1 usw... das entspricht wohl eher 
der menschlichen Gewohnheit.
Gast #3514350
Lesenswert?
• ▲
▼
Alex J. schrieb:
> Hi
>
> Soweit ich mich erinnere muss man einfach invertieren und 1LSB dazu
> addieren:
> 0000 0100
> 1111 1011
> 1111 1100

Das ist nur eine Möglichkeit. Allerdings eine, die aus praktischen 
Gründen sehr weit verbreitet ist. Auch bekannt als Zweierkomplement.

Oft gibt es spezialisierte Befehle, die es ersparen, zuerst das 
Einerkomplement zu bilden und dann eins zu addieren, um das 
Zweierkomplement zu bilden, sondern die Sache statt dessen in einer 
einzigen Operation erledigen.
Gast #3514368
Lesenswert?
• ▲
▼
Patrick schrieb:

> Möchte ich mir jetzt die Vorkammastelle anzeigen lassen, komme ich auf
>
> 1111 = (-1)
>
> oder?
>
> Bzw. heißt das, dass ich mir die Vorkommastelle gar nicht einzeln
> anschauen kann, sondern erst die ganze Festkommazahl zurückwandeln muss?

Nein, daß heißt nur, das du ein anderes Rundungsverfahren für die 
Abbildung als Ganzzahl wählen mußt. Das von dir verwendete wird 
üblicherweise als "floor" bezeichnet, also abrunden auf die 
nächstkleinere ganze Zahl.

Runde einfach anders, sinnvoll wäre vielleicht z.B. 0.5 zum Wert zu 
addieren, bevor man sich die Ganzzahl anschaut. Dann kriegst du 
folgendes raus:

Intervall         gerundeter Wert
...
-1.5 <= n < -0.5  -1
-0.5 <= n <  0.5   0
 0.5 <= n <  1.5   1
...


Beispiele:

-0.25:

 1111 1100 ;-0.25
+0000 1000 ;+0.5
-----------------
 0000 0100 ;+0.25
=================
 0000 ;round:0

-0.75:

 1111 0100 ;-0.75
+0000 1000 ;+0.5
-----------------
 1111 1100 ;-0.25
=================
 1111 ;round:-1

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.