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:
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 ...
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.
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.
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 ...
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!?!).
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.
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.
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.
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
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 =)
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).