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.
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)
Gast
#2433102
Wobei die Ganzzahl-Division insbesondere auch mit negativen Zahlen IMHO im Detail Compilerabhängig ist.
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.
Gast
#2433324
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.