Eine Real besteht immer aus 2 Komponenten im Speicher, nämlich einer "Kommazahl" und dem Exponenten. Z.B.
100.0 * 10^0 = 100
100.0 * 10^1 = 1000
Die interne Darstellung einer Kommazahl basiert auf der Zahl 2 und eben nicht auf der Zahl 10. Beispiel:
Dezimal: (2.75)dez = (2 + 0.5 + 0.25)dez = (10.11)dual
Während die Stellen rechts vom Komma im dezimalen System die Wertigkeiten 1/10, 1/100, 1/1000 usw haben, bekommen die Stellen im dualen System die Wertigkeiten 1/2, 1/4, 1/8 usw.
Aus praktischen mathematischen Gründen wird dann häufig aus einer 100*10^0 eine 0.1 * 10^3, so dass man nur die Nachkommastellen speichern muss.
Bei der Addition/Subtraktion hat man das Problem, dass zwei Zahlen mit unterschiedlichen Exponenten nicht addiert/subtrahiert werden können, weswegen eine von denen auf den Exponenten des anderen gebracht werden muss. Ein vereinfachtes Beispiel:
2*10^2
+ 3*10^-3
wird zu
0.200000*10^3
+0.000003*10^3
---------------
0.200003*10^3
Man sieht, dass die zweite Zahl bei zu grossen Unterschieden im Exponenten sehr schnell ausgelöscht wird, als wenn sie gar nicht vorhanden wäre, weil die Länge der Kommazahlen (Mantisse) begrenzt ist. Solche Effekte können bei Reglern schon mal Instabilitäten auslösen.
Bei der Subtraktion von 2 annähernd gleichen Zahlen, kann das Ergebnis noch schlimmere Resultate zeigen. Stellen wir uns vor, wir speichern max 4 Stellen nach dem Komma:
2.0000 * 10^2
-2.0001 * 10^2
Das wird zu
0.2000 * 10^2
-0.2000 * 10^2
------------------
0.0000 * 10^0
Wenn man dann einen Regler hat, in dem so etwas steht wie
A
------
B - C
und B ist nur ein klein wenig grösser als C ist die Mathematik richtig, aber im Programm steht letztlich eine A/0 was kein Ergebnis liefert,ist die Katastrophe da. Glücklicherweise kommt so etwas in der Automatisierung selten vor, oder?