Forum: Mikrocontroller und Digitale Elektronik Festkomma und Signed Wertrepäsentation


von Olaf .. (ope-)


Lesenswert?

Hallo Leute,

derzeit komme ich gerade ins schwimmen mit den FXP.

Lt. Aufgabenstellung habe ich ein 8-Bit, mit dem ein 2^-3 bis 2^+4 
signed Wert repräsentiert werden soll.

Das MSB soll das signum repräsentieren, also:
1
| 7   | 6   | 5   | 4   | 3   | 2    | 1    | 0    |
2
+-----+-----+-----+-----+-----*------+------+------+
3
| SGN | 2^3 | 2^2 | 2^1 | 2^0 | 2^-1 | 2^-2 | 2^-3 |
4
+-----+-----+-----+-----+-----*------+------+------+
5
| SGN | 8   | 4   | 2   | 1   | 1/2  | 1/4  | 1/8  |
6
                              ^
7
                           Dezimalpunkt

Jetzt ist die Frage nach dem *min/max Wert des digitalen 
Zahlenbereiches*. Addiere ich nun alles komme ich auf 127/8, also 15.875 
- und zwar pos. und neg.; sprich +/-127/8

Nun scheint es einige Quellen zu geben, die das MSB/SGN mit in den 
Wertebereich reinrechnen (womit dann ja das signum Bit seine Information 
verloren hat), was IMO verkehrt ist - das signum repräsentiert ja keine 
Zahl.

Der underlaying Integer hat ja nun einen Wertbereich von -128 bis +127, 
das dürfte allgemeiner Konsens sein ....

Die Lösung sagt nun: -16 ... 15 für min/max, was IMO auch falsch ist. 
Ich komme zum Schluss, das die Aufgabenstellung mit 2^-3 bis 2^+4 
bereits verkehrt ist.

Wie ist denn die Nomenklatur, bzw. was ist richtig. Die Quellen scheinen 
sich um Aussagen dazu auch etwas zu drücken. Entweder schön mathematisch 
ist unsigned und damit damit wiederum sehr einfach ...

von (prx) A. K. (prx)


Lesenswert?

Es ist ein wenig schwierig, in deinem Text die eigentliche 
Aufgabenstellung von deiner Interpretation und deinem Lösungsansatz zu 
trennen.

von Jim M. (turboj)


Lesenswert?

Olaf .. schrieb:
> Die Lösung sagt nun: -16 ... 15 für min/max, was IMO auch falsch ist.

Jup, ist inkorrekt.

Korrekt wäre [-16,16[ als Wertebereich, d.h. die +16 ist außerhalb.

Man könnte sich auch die Mühe machen die 01111111 als dezimale Kommazahl 
darzustellen. Ist aber einfach 16 - 2^-3.

Olaf .. schrieb:
> Ich komme zum Schluss, das die Aufgabenstellung mit 2^-3 bis 2^+4
> bereits verkehrt ist.

Nö, nur Deine Interpretation. 2^-3 ist die kleinste von Null 
verschiedene darstellbare Zahl, -2^+4 die mit dem größen absoluten 
Betrag.

Bei den Festkomma Sachen will man praktisch immer sowohl den 
Wertebereich als auch die Genauigkeit wissen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Olaf .. schrieb:
> Die Lösung sagt nun: -16 ... 15 für min/max, was IMO auch falsch ist.
> Ich komme zum Schluss, das die Aufgabenstellung mit 2^-3 bis 2^+4
> bereits verkehrt ist.

Die Aufgaben stellt das Leben - warum soll die Aufgabenstellung falsch 
sein?

Es ist an dir, eine Lösung zu finden oder zu beweisen, dass es im Rahmen 
der in der Aufgabenstellung genannten Randbedingungen (8-Bit) keine 
Lösung gibt.

von Olaf .. (ope-)


Lesenswert?

OK; besser getrennt:

Aufgabe: Lt. Aufgabenstellung habe ich ein 8-Bit, mit dem ein 2^-3 bis 
2^+4
signed Wert repräsentiert werden soll.... Jetzt ist die Frage nach dem 
*min/max Wert des digitalen Zahlenbereiches*.

Die Lösung sagt nun: -16 ... 15 für min/max ...

-------------------------------------------------------

Jim M. schrieb:
>> Die Lösung sagt nun: -16 ... 15 für min/max, was IMO auch falsch ist.
>
> Jup, ist inkorrekt.
>
> Korrekt wäre [-16,16[ als Wertebereich, d.h. die +16 ist außerhalb.

OK, lt. math. Schreibweise offenes Intervall (-16, +16), d.h. 
ausschließlich der 16,0. (geschlossenes Intervall wäre dann [-16,+16] 
mit/einschl. der 16). Zumindest lese ich aus der Antwort, dass das 
Signum nicht in die Werte- Repräsentation einfließt, was ja auch 
natürlich ist/wäre.

Letzlich komme ich nur bis zu +/-(15 7/8) als repräsentierten Wert ran.

Jim M. schrieb:
> Ich komme zum Schluss, das die Aufgabenstellung mit 2^-3 bis 2^+4
>> bereits verkehrt ist.
>
> Nö, nur Deine Interpretation. 2^-3 ist die kleinste von Null
> verschiedene darstellbare Zahl, -2^+4 die mit dem größen absoluten
> Betrag.

Bei ersterem stimme ich zu. Danach steige ich aus: -2^4 ist ja genau das 
Signum Bit auf '1', alles andere '0' in Deinem Bsp.

0b11111111 = -128
0b10000000 = +127

wäre es bei den bekannten 8-Bits. Imo flutscht jetzt die Denkweise 
daraus in den Wertebereich der "skalierten" Fixpoint Zahl. Ich bin wegen 
der Zählweise des SGN irritiert ...

von foobar (Gast)


Lesenswert?

Ich vermute, die Aufgabe ist einfach schlampig gestellt.  2^-3 und 2^4 
soll einfach aussagen, dass 3 Stellen hinterm und 4 vorm Komma 
existieren sollen.  Dazu noch ein Bit für's Vorzeichen.

Andere Interpretationen ergeben wenig Sinn bzw erfordern ein sehr 
eigenwilliges Format (ohne 0!?!).

von Wolfgang (Gast)


Lesenswert?

Olaf .. schrieb:
> OK, lt. math. Schreibweise offenes Intervall (-16, +16), d.h.
> ausschließlich der 16,0.

Da denk noch mal drüber nach.
Die Ganzzahl -16 = 0x10000 lässt sich wunderbar mit 5 Bit darstellen. An 
der Seite ist das Intervall geschlossen.

von Korg (Gast)


Lesenswert?

1
 | 7   | 6   | 5   | 4   | 3   | 2    | 1    | 0    |
2
 +-----+-----+-----+-----+-----*------+------+------+
3
 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 | 2^-1 | 2^-2 | 2^-3 |
4
 +-----+-----+-----+-----+-----*------+------+------+
5
 | -16 | 8   | 4   | 2   | 1   | 1/2  | 1/4  | 1/8  |
6
                               ^
7
-16 bis +15,875
8
9
-8   = -16 + 8 =                  0b1100 0000
10
-0,5 = -16 + 8 + 4 + 2 + 1 + 0.5  0b1111 1100
11
+1,5 = 1 + 0,5                    0b0000 1100
12
13
-2,25     0b1110 1110
14
+1,75     0b0000 1110
15
-----
16
-0,50     0b1111 1100

von foobar (Gast)


Lesenswert?

Es soll eine Kodierung für +/- 0.125..16 erstellt werden.  Null ist 
nicht dabei, dagegen -16 und +16.  Über die zur Verfügung gestellten 
Bits, kann man sich Gedanken über die Auflösung machen - wird aber 
bereits Spekulation (gleichmäßige Schritte, oder doch logarithmisch?).

Das ist einfach eine schlampig gestellte Aufgabe.  Nehmt die 
naheliegenste Interpretation (2er Komplement mit Wertigkeit 1/8) und die 
Chance, dass ihr richtig geraten hat, ist ziemlich hoch.

von Olaf .. (ope-)


Lesenswert?

Korg schrieb:
>
1
> -16 bis +15,875
2
> 
3
> -8   = -16 + 8 =                  0b1100 0000
4
> -0,5 = -16 + 8 + 4 + 2 + 1 + 0.5  0b1111 1100
5
> +1,5 = 1 + 0,5                    0b0000 1100
6
> 
7
> -2,25     0b1110 1110
8
> +1,75     0b0000 1110
9
> -----
10
> -0,50     0b1111 1100
11
> 
12
>

Das Bsp. ist eigentlich selbst erklärend.

Ein Einer-Komplement ist das jedoch nicht, richtig? Wie nennt man solche 
Darstellung denn?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Olaf .. schrieb:
> Ein Einer-Komplement ist das jedoch nicht, richtig? Wie nennt man solche
> Darstellung denn?

Zweierkomplement?
https://de.wikipedia.org/wiki/Zweierkomplement

von Olaf .. (ope-)


Lesenswert?

Wolfgang schrieb:
> Olaf .. schrieb:
>> Ein Einer-Komplement ist das jedoch nicht, richtig? Wie nennt man solche
>> Darstellung denn?
>
> Zweierkomplement?
> https://de.wikipedia.org/wiki/Zweierkomplement

Das hier ist doch kein Zweierkomplement, oder? Da wird das Komplement 
gebildet und 1 addiert - mir ist nicht bewusst, dass hier so etwas 
passiert.

von Wolfgang (Gast)


Lesenswert?

Olaf .. schrieb:
> Da wird das Komplement gebildet und 1 addiert - mir ist nicht bewusst,
> dass hier so etwas passiert.

Hier wird natürlich 2^-3 (dez 0.125) addiert ;-)
1
+0.5 = 0b00000100
2
inv.   0b11111011
3
+2^-3  0b11111100
und das ist dasselbe wie

Olaf .. schrieb:
>> -0,5 = -16 + 8 + 4 + 2 + 1 + 0.5  0b1111 1100

von Olaf .. (ope-)


Lesenswert?

vielen Dank für die Erklärungen! Ich muss jetzt aber erst mal meinen 
Knoten aus dem Gehirn bekommen.

Wenn es allg. beim Zweierkomplement heißt, wir invertieren und addieren 
1 heißt es wohl eher: wir invertieren und addieren eine binäre '1' (am 
LSB), unabhängig vom Format, welches die Bitfolge repräsentiert (zB. 
hier 1Q4.3: Signum + 4 integer + 3 fractional parts).

Und: Das gesetzte MSB repräsentiert das Signum - rechnet man auf 
Bit-Ebene kommt man beim 2er Komplement auf genau diese bitweise XOR 
Bit-Addition, rechnet man im binären "Stellenwertsystem" wird das MSB 
mit dem Wert -2^MSB errechnet und der Rest wie gehabt schlicht addiert.

Korrekt? Ich muss das 'mal mit ein paar Zahlen für 
Add./Sub.durchprobieren =)

von Wolfgang (Gast)


Lesenswert?

Olaf .. schrieb:
> Wenn es allg. beim Zweierkomplement heißt, wir invertieren und addieren
> 1 heißt es wohl eher: wir invertieren und addieren eine binäre '1' (am
> LSB), unabhängig vom Format

Die Additionseinheit im µC rechnet immer mit natürlichen Zahlen oder 
ganzen Zahlen und weiß nicht, wo du dir das Komma denkst. Das Fixkomma 
gibt es nur in deinem Kopf (und allenfalls bei der Ausgabe).

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.