AVR-GCC: Ausgabe einer Festkommazahl

Gast #4313485
Lesenswert?
• ▲
▼
Das Originalbeispiel von Dietrich ist richtig:

104 * 10000 / 128 = 8125

Ich habe die 3stellige Ausgabe gewählt und Divisor und Dividend gekürzt, 
dann passt das Zwischenergebnis, wenn FP = 0111 1111, in eine 16-Bit 
Variable.

Beispiel:

104 * 125 / 16 = 812,5
Gast #4314555
Lesenswert?
• ▲
▼
Markus schrieb:
> Das ist für mich keine Lösung, da die Float-Library für meinen
> ATTiny2313 einfach zu groß ist.

Dann mach es doch selbst und zu Fuß:

1. pack deine 8 Bit Zahl in eine 16 Bit Zahl. Nennen wir sie hier mal 
ZETT.
2. starte deinen Ergebnis-String mit "0."
3. multipliziere die Zahl mit 10
4. nimm den High-Teil der Zahl als Ziffer
   ( Ziffer = '0' + (ZETT>>8; )
   und füge sie an deinen Ergebnis-String an
5. entferne den High-Anteil ( ZETT = ZETT & 255; )
6. wiederhole 3..5 so oft du willst

W.S.
Gast #4314666
Lesenswert?
• ▲
▼
(Beispiel 8 Bit: 0110 1000 == 0.8125) aus dem 1. Beitrag

                       "0."
0x68 * 10 = 0x410
'0' + High(0x410) ->   "0.4"
(0x410) & 0xFF = 0x10

0x10 * 10 = 0xA0
'0' + High(0xA0) ->    "0.40"
(0xA0) & 0xFF = 0xA0

0xA0 * 10 = 0x640
'0' + High(0x640) ->   "0.406"
(0x640) & 0xFF = 0x40

0x40 * 10 = 0x400
'0' + High(0x400) ->   "0.4064"
(0x400) & 0xFF = 0x00

Wo liegt mein Fehler?

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.