Mathematik für MikrocontrollerMikrocontroller besitzen im Allgemeinen eine eingebaute Integer Arithmetik, das heißt sie können nur mit Ganzen Zahlen rechnen. Integer bedeutet alles nach dem Komma wird abgeschnitten, also weggelassen. Das hat auch nichts mit runden zu tun, dafür muss man selber sorgen, indem man zum Beispiel 0,5 zu einem Ergebnis (was in Integer gewandelt wird) dazu addiert. Das Rechnen mit gebrochenen Zahlen muß über die Software gelöst werden, was umständlich und langsam ist. Aus diesem Grund sollte man versuchen möglichst mit ganzen Zahlen auszukommen. Beim Rechnen mit ganzen Zahlen sind allerdings ein paar Grundregeln zu beachten. In der Mathematik ist a * b /c = a / c * b. Beim Rechnen mit ganzen Zahlen kann das allerdings zu erheblichen Fehlern führen. Beispiel 27 * 49 / 28 = 47,25, das Komma 25 kann die Integerarithmetik nicht also wäre ideal wenn 47 raus kommen würde. Bei 27 * 49 / 28 = 47 ist das auch der Fall. Rechne ich aber 27 / 28 * 49 = 0 kommt Null raus, weil aus der 0,9... halt eine 0 wird und 0 * 49 immer noch Null ist. Man sollte also immer versuchen große Zwischenergebnisse zu erzielen, muß aber dabei aufpassen, daß kein Zahlenüberlauf eintritt. Bei der üblichen 16Bit Arithmetik ist bei 65535 Schluß bzw bei 32767 mit Vorzeichen. Das heißt ohne Vorzeichen ist das Ergebnis von 222 * 333 (= 73926) nicht 73926 sondern 8391 was ja auch leicht daneben liegt. Wenn ich nun zum Beispiel die Tagesmitteltemperatur mit einer Integerarithmetik berechnen will und ich benutze die normalen Temperaturwerte, habe ich folgendes Problem, den Mittelwert berechne ich wie folgt: Die Lösung, ich multipliziere die Zahlen für die Berechnung einfach mit 100. Sprich 15°C sind für mich intern eine 1500. Dann hab ich also (10 * 1500) + 2500 / (10 +1) = 17500 / 11 = 1590,9
© 05.12.2007 Hans-Jürgen Jacob (Pirna)
|