Berechnungen für Kommazahlen rein mit Integern berechnen. Wie geht das?
Moin,
ich hab als Aufgabe bekommen einen Taschenrechner für einen Microcontroller zu programmieren. Dafür darf ich jedoch nur Integer benutzen. Fremde Bibliotheken darf ich keine benutzen. Das einzige was ich der Berechnung geben darf ist folgendes:
Position des Punkten (Bei 7,741 z.B. Position 4 und bei 14,6 Position 2)
Länge der Zahl (Bei 7,741 z.B. Länge 4 und bei 14,6 Länge 3)
Zahl ohne Komma (Bei 7,741 Zahl = 7741 und bei 14,6 Zahl 146)
Wie kann ich damit Addition, Subtraktion, Mulitplikation und Division durchführen und dabei Dinge wie Übertrage usw. berücksichtigen?
Momentan beinhaltet meine Lösung, jede Zahl aufzuteilen in Wert vor dem Komma und Wert hinter dem Komma. Dann mit komplizierten Berechnungen zusammen mit Punktposition und Länge der Zahl jeweils neue Werte für die beiden Zahlen berechnen und anschließend die beiden wieder kompliziert zusammensetzen. Denke ich da vielleicht zu kompliziert und es gibt einfachere Lösungen? Weil bei jeder neuen Zeile löse ich ein Problem und für einen Sonderfall kommen 2 neue Probleme hinzu.
Vielen Dank für Antworten
2 Antworten
Multipliziere die beiden Integer Zahlen (7741 und 146) und füge das Komma an der Stelle Kommaposition1+Kommaposition2-1 ein (also: Position 4 + 2 -1)
Hintergrund:
7,741 * 14,6 = 7741/1000 * 146/10 = 7741*146/(1000*10) = 7741*146/10000
(Die NACHKOMMAStellen addieren sich, die sind jeweils um 1 kleiner als die Kommaposition)
Hab die Frage wieder schlampig gelesen und dachte, du brauchst nur die Multiplikation.
Für Addition und Subtraktion:
Hänge bei der Integer-Zahl mit kleinerer Nachkommazahl so viele Nullen an, wie die Differenz der Kommapositionen angibt. Addiere/Subtrahiere die Integer-Zahlen und füge das Komma an der Position ein, die zuvor die größere Position war
Mulipliziere die zu addierenden Zahlen mit 1000 (bei drei Nachkommastellen), addiere sie, teile das Ergebnis durch 1000, nimm den Int-Wert davon.
Addition und Subtraktion war bei mir tatsächlich das größte Problem und tatsächlich wollte ich Multiplikation schon genauso durchführen wie du geschrieben hast. Hast du eine Idee für Addition und Subtraktion? Danke trotzdem für die nette Antwort!