Forum: Mikrocontroller und Digitale Elektronik Kaufmännisches Runden in C auf Mikrocontroller?


von Erwin M. (nobodyy)


Lesenswert?

Hauptsächlich für Mikrocontroller suche ich eine Lösung um kaufmännisch 
zu runden (nach DIN 1333), speziell für 32-Bit Integers.
Gibt es dafür empfehlenswerte Makros oder Funktionen?

Mein Ansatz wäre erstmal ein Makro für positive (ganze) Zahlen und
( (a)/(b) +  ( ( (a) % (b) >= (float)(b)/2.0 ) ? 1 : 0 ) )
und danaben ein Makro das die Beträge einsetzt, also positive Zahlen 
sicherstellt sowie das Vorzeichen bestimmt und nachher wieder anzufügt.
Um den Float-Cast kommt man wohl nicht herum im Fall b=1, und um 
Überläufe zu vermeiden.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Du willst also den Bruch a/b runden? Das geht für positive Zahlen so:

  (a + b / 2) / b

(alle Operationen in Integer, FP-Operationen brauchst du keine)

von heinzi (Gast)


Lesenswert?

Wobei die Ganzzahl-Division insbesondere auch mit negativen Zahlen IMHO 
im Detail Compilerabhängig ist.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Dieses Problem hat Erwin ja schon erkannt und wird es berücksichtigen:

Erwin Meyer schrieb:
> und danaben ein Makro das die Beträge einsetzt, also positive Zahlen
> sicherstellt sowie das Vorzeichen bestimmt und nachher wieder anzufügt.

von Stefan (Gast)


Lesenswert?

Hallo,

will man wirklich vollständig "kaufmännisch Rechnen" dann ist die einzig 
wahre Lösung eine BCD-Arithmetik (Binary Coded Decimal), denn mit Runden 
allein ist es nicht getan!!!
Es gibt hierfür teils fertige Bibliotheken.


Gruss Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.