darfs ein bischen mehr sein bei REAL ?

J Schohaus
2006-12-21
2006-12-22
  • J Schohaus - 2006-12-21

    Bei arbeiten mit Real und LREAL Zahlen sind mihr Ungenauigkeiten aufgefallen.

    Wenn man z.B. 134,11 - 126,91 Rechnet bekommen ich als Ergebnis 7.20000000000002. ( als LRela berechnet ! )

    Kann jemand das erklären ?

    mein Beispiel Prgogramm

    VAR

    X1 : LREAL := 134.11 ;
    
    X2 : LREAL := 126.91;
    
    lrTest : LREAL ;
    

    END_VAR

    lrTest := X1 - X2 ;

    mfG Jochen Schohaus

     
  • gravieren - 2006-12-21

    Hi J Schohaus

    Das haben sehr viele "Von Neumann" - Rechner, und Programierumgebungen .

    Bei Finanz-Daten ... wo dieses NICHT sein darf, gibt es dafür speziele

    "Geld"-Zahlenformate.

     
  • Denkes - 2006-12-21

    Hallo

    hier mal eine Kurzübersicht über Zahlenformate:

    Um eine Zahl darzustellen gibt es viele Formate. Alle stehen unter folgenden "Zwängen";

    • möglichst wenig Speicherplatz

    • möglichst genaue und schnelle Rechenoperationen

    • möglichst großer Zahlenbereich

    Diese Forderungen widersprechen einander, so dass es eben viele Formate gibt.

    Zum Format Real:

    Hier reicht der Zahlenbereich von ca. +/-10^(- 38) bis +/-10^(+ 38). Die Zahlen sind auf 6 Stellen nach dem Komma genau. Dafür werden je Zahl 32 Bit benötigt und es wird bei der Darstellung einigermaßen herumgetrickst (z.B. Hiddenbit, Vorzeichenbit wird weggebeamt usw.). Die Wertigkeit des wertkleinsten Bit beträgt 2^(-23)=0,0000001192.

    D.h. aber: keine "absolute" Genauigkeit!

    Beim Format LReal werden je Zahl 64 Bit verwendet. Die Folge ist ein Zahlenbereich von ca. +/-10^(- 128) bis +/-10^(+ 128), bei einer Genauigkeit von 15 Stellen nach dem Komma, also auch nicht absolut genau.

    Normalerweise braucht sich der Anwender um solche Fragen nicht zu kümmern. Er sollte nur das "richtige" Format verwenden. Deshalb halte ich es auch für völlig unsinnig, z.B. die Zahl Pi mit zig Stellen nach dem Komma in einem Programm zu verwenden (oscat.lib). Spezielle Anwendungen, wie z.B. das Markscheidewesen im Bergbau benötigen hochgenaue Formate, weil die exakte Position in der Regel über Dreiecksberechnungen erfolgt und bei einem sinuswert mit 6 Stellen nach dem Komma z.B. ein Autotunnel irgendwo, aber nicht am geplanten Ort wieder das Tageslicht erreichen würde.

    Gruß Norbert

     
  • Anonymous - 2006-12-22

    Originally created by: Bernhard Werner

    Hallo,

    um das mal klarzustellen: in CoDeSys werden REALs nie "per Hand" verarbeitet. Entweder bietet der Prozessor bereits spezielle Befehle für Real-Operationen, oder es werden Funktionen im LZS aufgerufen.

    Für Genauigkeit der REAL-Verarbeitung ist entweder der Prozessor oder die math.lib im LZS verantwortlich.

    Bernhard

     

Log in to post a comment.