4 Bit Wert in 3 1/2 Bit umrechnen?

Gast #172776
Möchte Werte im Bereich von 0-15 auf einen Bereich von 0-11 umrechnen.
Für die größeren Zahlen klappt es einigermaßen, von links gesehen die
erste Null zu behalten und die restlichen Stellen nach rechts zu
schieben.

Kennt jemand die "saubere" Lösung, mit der sich auch kleinere Werte
ordentlich runden lassen?
Gast #172780
na ja, sind es denn 12/16, (da die 0 ja auch mit darstellbar ist)?

also dann auch 3/4

/4 ist mit shift realisierbar, und *3 durch 3fache Addition

Du must also zuerst 3 mal addieren (also passende Registergröße
vorhalten, müssten ja dann 10 bit sein) und das ergebniss dann schieben
Gast #172781
AUtsch, wo ich den Zahlenwert in 8 Bit breitkloppen möchte weiß ich auch
grad nicht.

"zur Not" tuns auch 4 Bit (respp. 6 Bit)

also

15d * 3d = 45d (binär = 101101
das dann durch 4 = 2 * shift rechts = 1011 = 11d
Gast #172783
0  0,00  0
1  0,75  1
2  1,50  2
3  2,25  2
4  3,00  3
5  3,75  4
6  4,50  5
7  5,25  5
8  6,00  6
9  6,75  7
10  7,50  8
11  8,25  8
12  9,00  9
13  9,75  10
14  10,50  11
15  11,25  11

Ein bishcen ungenau wird es also immer
Gast #172784
Na ja und die Tabelle kann man ja mit int-Werten belegen. Wenn gerechnet
werden soll: Tabellenwert * 10; + 5 und wieder durch 10 teilen. Dann
sind die C-Rundungsfehler eliminiert.

MW
Gast #172785
Eben bin ich mit der Bahn nach Hause gefahren und dachte nur: Autsch,
was für ne bekloppte Frage. Wert kopieren, zweimal schieben, Ergebnis
vom Ursprungswert subtrahieren und fertig.

Danke für die vielen schnellen Antworten. Peter, Du hättest bestimmt
noch irgendwo nen Zyklus gespart doch für mich ist die Performance
vorerst ausreichend und ich kenne mich mit dem 8051ger nicht aus...
(die neue Schule, erst mit´m AVR angefangen ;)

THX

(und nächstes mal versuche ich erstmal nachzudenken bevor ich dumme
Fragen stelle ;)

Basti aka "Alisa 1387"
Gast #172786
Salve,

@Martin:
es bleibt trotzdem bei 11/15 - daß die 0 mit im Wertebereich liegt,
spielt doch keine Rolle. 0 bleibt 0, und 15 wird 11. Also 11/15.

Mark
Gast #172787
Das ist ja alles viel zu umständlich. So ganz habe ich nicht verstanden,
wozu ich 10 Bit brauche, um einen 4bit Wert nach 3 1/2 umzurechnen.

Die "garantiert kürzere" Tabelle ist mir zu lang.

Und das Runden ist egal, da gar keine Nachkommastellen benötigt werden
(waren die 10 Bit für Nachkommastellen gedacht?)
#172790
"Peter, Du hättest bestimmt
noch irgendwo nen Zyklus gespart doch für mich ist die Performance
vorerst ausreichend und ich kenne mich mit dem 8051ger nicht aus..."


Die ATMegas können doch auch multiplizieren:

ldi r16, 15 ;r16 = 15
ldi r17, 188
mul r16, r17
mov r16, r1 ;r16 = 11


Peter
Gast #172793
> da man keine halben Bits nutzen kann *g*

Doch, es gibt nutzbare halbe bits (auch außerhalb von Gaststätten um
Bitburg)

Beid er seriellen Übertragung kann man dei Anzahl der Stop-bits auf 1,5
oder ,5 stellen. Dies hat durchaus sinnvolle Gründe.
Gast #172794
aber trotzdem versteh ich nicht, wieso eine integer-Multiplikation
effizienter sein soll als 2 Additionen plus ein Doppel-Shift (siehe
meine obige Formel)
#172795
@Martin,

"wieso eine integer-Multiplikation effizienter sein soll"

LDI + MUL = 2 Words / 3 Zyklen
2 * ADD + 2 * LSR = 4 Words / 4 Zyklen

Die Effizienz ist aber nicht ausschlaggebend, sondern daß die
Multiplikation auch für beliebig andere Umrechnungen geeignet ist.
Z.B. um ADC-Werte in reale Spannungen umzurechnen und umgekehrt.

Wichtig ist dabei nur, daß man den Koeffizienten so wählt, daß eine
Division durch 256 oder 65536 oder andere Zweierpotenzen herauskommt.



Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.