Bei der Berechnung von Kommazahlen "float" vermeiden

Gast #760125
Lesenswert?
• ▲
▼
Hallo zusammen.

Ich möchte gern eine Temperatur mit zwei Nachkommastellen anzeigen (in 
einem Display angesteuert von einem ATMega64).

Meine Temperatur ist zunächst ein Integer mit 256 Multipliziert, z.B. 
5158 für 20,15°C.

Wie kann ich die Nachkommastelle berechnen ohne den Datentypen float zu 
verwenden?
Die Berechnung 5158/256=20; auf Integer Ebene, und die Nachkommastelle?
Wird das Modulo berechnet?

Oder komme ich nicht drumherum?
#760167
Lesenswert?
• ▲
▼
Hallo,
ich würde das ganze mit 100 multiplizieren und durch 256 dividieren:

5158*100/256 = 515800/256 = 2014,844

Wenn Du nun diese Zahl nach BCD wandelst hast Du 2 Nachkommastellen!

Das Ergebnis der Multiplikation ist eine 32Bit oder 24Bit Zahl. Du 
addierst 128 dazu um zu runden. Dann nimmst Du das Byte 1 und 2 und 
wandelst das nach BCD.

Das ganze geht gut in Assembler!

Waldo
Gast #760191
Lesenswert?
• ▲
▼
>Meine Temperatur ist zunächst ein Integer mit 256 Multipliziert, z.B.
>5158 für 20,15°C.

Das sind doch beste Vorraussetzungen:
Also:
-highbyte von 5158 (20) auf die Anzeige schaffen,              20
-Punkt darstellen,                                             20,

-lowbyte von 5158 (38) mit 10 multiplizieren =>380,
-highbyte des Ergebnisses (01) zur Anzeige schaffen,           20,1

-lowbyte von 380 (124) mit 10 multiplizieren =>1240,
-highbyte des Ergebnisses (04) zu Anzeige schaffen,            20,14

-lowbyte von 1240 (216) mit 10 multiplizieren =>2160,
-highbyte des Ergebnisses (08) zu Anzeige schaffen,            20,148

-lowbyte von 2160 (112) mit 10 multiplizieren =>1120,
-highbyte des Ergebnisses (04) zu Anzeige schaffen,            20,1484
...
und so weiter, je nachdem, wieviel Stellen du willst...
(oder Abrruch bei Nullen im Lowbyte)

PS: 5158/256 = 20,1484...
Das Verwenden des HighBytes ersetzt! das /256 !
Einfacher bekommst dus nicht ;-)
#760269
Lesenswert?
• ▲
▼
Bob wrote:
> ja, das ist ein logisches UND,
Nein, es ist ein bitweises UND. Die Operation "x&255" ist eine andere 
Schreibweise für "x%256" (x modulo 256). Jeder anständige C-Compiler 
macht aber aus einem "%256" automatisch eine dem "&255" entsprechende 
Operation (bei 8-Bit-Rechnern bedeutet das einfach: "Nimm nur das 
Low-Byte für die anschließende Operation").

Generell gilt
x % 2^n = x & (2^n - 1)

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.