Mathematischer Hintergrund von REAL

Markus

Administrator
Teammitglied
Beiträge
6.857
Reaktionspunkte
2.880
Zuviel Werbung?
-> Hier kostenlos registrieren
also ich bin nicht so der totale mathefreak, und wollte fragen ob mir mal wer ein paar takte zum thema REAL erzählen kann.


eine REAL benötigt gleich viel speicher wie eine DINT, kann aber viel größere Zahle noch dazu mit Nachkommastellen enthalten.

Geht das irgendwo auf kosten der genauigkeit?

danke!
 
schau mal im Simatic-Manager in die Hilfe/Hilfethemen/Index
dort gibst du Real in das Fächlein ein
ist recht gut erklärt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
Zuletzt bearbeitet:
Zurück
Oben