Fehler beim addieren von Real-Werten

Züttu

Level-1
Beiträge
195
Reaktionspunkte
19
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir ist aufgefallen das beim addieren von Real-Werten ein Rundungsfehler auftritt. Konkret habe ich unten stehenden Code geschrieben um die Impulse von einem Durchlfussmesser in einen Wert zu wandeln. Nach einiger Zeit ergibt sich aber einige stellen hinter dem Komma ein Fehler, woher kommt das, hat das auch schon jemand beobachtet?

Code:
      U     "M0.5_Taktmerker_1Hz"
      FP    M     10.1
      SPBN  WEIT
      L     MD    20
      L     1.000000e-001
      +R    
      T     MD    20
WEIT: NOP   0
 
macht euch halt mal die Mühe und benutzt die Suchfunktion im Board.

Wenn man da z.B. Rundungsfehler eintippt dann stößt man z.B. auf diesen Thread Link

Da ist auch ein FAQ von Siemens dazu verlinkt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir ist aufgefallen das beim addieren von Real-Werten ein Rundungsfehler auftritt.

Beschreibung

Die Gleitpunkt-Funktionen beeinflussen die Bits A1, A0, OV und OS im Statuswort.
Die folgenden Tabellen zeigen den Signalzustand der Bits im Statuswort für die Ergebnisse von Operationen mit Gleitpunktzahlen (32 Bit).


Gültiger Bereich A1 A0 OV OS
+0, -0 (Null) 0 0 0 *
-3,402823E+38 < Ergebnis < -1,175494E-38 (negative Zahl) 0 1 0 *
+1,175494E-38 < Ergebnis < 3,402824E+38 (positive Zahl) 1 0 0 *
* Das OS-Bit wird vom Ergebnis der Operation nicht beeinflußt.


Ungültiger Bereich A1 A0 OV OS
Unterschreitung
-1,175494E-38 < Ergebnis < - 1,401298E-45 (negative Zahl) 0 0 1 1
Unterschreitung
+1,401298E-45 < Ergebnis < +1,175494E-38 (positive Zahl) 0 0 1 1
Überlauf
Ergebnis < -3,402823E+38 (negative Zahl) 0 1 1 1
Überlauf
Ergebnis > 3,402823E+38 (positive Zahl) 1 0 1 1
keine gültige Gleitpunktzahl oder unzulässige Operation (Eingangswert außerhalb des gültigen Wertebereichs) 1 1 1 1

irgendwann bist du nicht mehr im gültigen Bereich.
 
danke für eure schnellen Antworten, ich hab mir jetzt kurz die FAQ von Siemens durchgelesen, das erste Beispiel hab ich auch mehr oder weniger begriffen.

Das heisst das beim addieren und subtrahieren die Exponenten angeglichen werden, und alles was weiter als 6 Stellen hinter dem Komma ist fällt weg.

geh ich dann richtig in der Annahme das folgende Rechnung korrekt ist?

Code:
L     1.000000e+003
      L     1.000000e-005
      +R    
      =     1.000000e+003
 
@verpolt
??? das hat eher nichts mit dem "Rundungsfehler" zu tun.

Hier http://www.sps-forum.de/showpost.php?p=112191&postcount=9 ist das gut beschrieben.

@Züttu

Du kannst ja mal versuchen, eine kleine Realzahl auf eine sehr große Realzahl aufzuaddieren. Da ändert sich dann gar nichts mehr.
Ich würde an deiner Stelle eine DINT nutzen, das reicht im Allgemeinen aus.

Edit: Ich sehe, du hast das schon selbst gefunden. :)
 
Zurück
Oben