-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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren