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

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