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