TIA BUG bei einer CPU1517F-3 Bei Addition REAL Werte ?

pramkies

Level-2
Beiträge
80
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Gemeinde,

ich habe heute was ganz komisches entdeckt in der CPU. Es schein das die CPU einen falsche Berechnung macht mit real werten !
Siehe Bild !
Das Ergebnis müsste 100.0 sein und nicht 99.999 !! Alle drei REAL Typen ! Ich verstehe das nicht ! Ist das ein BUG ?



Siemens_BUG.png
 
Das ist normal. Bei REAL lassen sich nicht alle Werte perfekt darstellen, dadurch bekommt man eigentlich immer Rundungsfehler in den hinteren Nachkommastellen.
 
9,99999999999999 (unendlich weiter) ist mathematisch gesehen = 1

Allerdings geht es hier natürlich eher um Rundungsfehler aufgrund des Aufbaus einer Real-Zahl (Also Gleitkommazahl).
Wie @vollmi bereits geschrieben hat: keine ==-Abfragen bei Gleitkommazahlen!
 
?

Also die einfachste Erklärung ist, dass 1/3 = 3,33333… ist.
3 * 3,33333… ist 9,99999…
3 * 1/3 ist 1
also ist 9,99999… = 1

Für bessere Beweise müsste ich noch einmal bei einem Mathematiker nachfragen. Ändert aber nichts an der Faktenlage.

Das ist das Problem mit der Unendlichkeit, die wir Menschen nicht denken können.

Dazu auch:
Hilberts Hotel
 
?

Also die einfachste Erklärung ist, dass 1/3 = 3,33333… ist.
3 * 3,33333… ist 9,99999…
3 * 1/3 ist 1
also ist 9,99999… = 1

Für bessere Beweise müsste ich noch einmal bei einem Mathematiker nachfragen. Ändert aber nichts an der Faktenlage.

Das ist das Problem mit der Unendlichkeit, die wir Menschen nicht denken können.

Dazu auch:
Hilberts Hotel
Immer noch *hust*, 9,9999 ist vielleicht 10 aber nicht 1, oder ich habe in Mathe nicht aufgepasst.
 
Das hat nichts mit "Unendlich" zu tun, sondern mit dem prinzipiellen Rundungsfehler bei der Darstellung eines REAL-Wertes. Ersens kann das Ergebnis von 1/3 nicht exakt dargestellt und abgespeichert werden, und zweitens kann auch das Ergebnis der Multiplikation des bereits ungenau gespeicherten Wertes mit 3 nicht exakt dargestellt werden. So kommt es, daß 1 / 3 * 3 nicht wieder exakt 1 ergibt.
 
Das hat nichts mit "Unendlich" zu tun, sondern mit dem prinzipiellen Rundungsfehler bei der Darstellung eines REAL-Wertes. Ersens kann das Ergebnis von 1/3 nicht exakt dargestellt und abgespeichert werden, und zweitens kann auch das Ergebnis der Multiplikation des bereits ungenau gespeicherten Wertes mit 3 nicht exakt dargestellt werden. So kommt es, daß 1 / 3 * 3 nicht wieder exakt 1 ergibt.
Dass es bei der Realzahldarstellung nicht um die Unendlichkeit geht, ist mir bewusst.

Mein entflechten von unnützem Wissen ist hier aber auf peinlichste Art und Weise in die Hose gegangen. 😶‍🌫️
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wow, da habe ich etwas Neues gelernt. Es hängt also mit dem IEEE-754 Konverter für Fließkommazahlen zusammen... Wie würdet ihr eine Abfrage für 100.0 durchführen? Soll es in DINT umgewandelt und aufgerundet werden? Diese Freigabe war notwendig, um eine Berechnung von der VISU aus zu starten, basierend auf Prozentangaben. Dabei wollte ich sicherstellen, dass der Bediener genau 100.0 % in der Gesamtsumme eingibt. Vielen Dank!
 
Wow, da habe ich etwas Neues gelernt. Es hängt also mit dem IEEE-754 Konverter für Fließkommazahlen zusammen... Wie würdet ihr eine Abfrage für 100.0 durchführen? Soll es in DINT umgewandelt und aufgerundet werden? Diese Freigabe war notwendig, um eine Berechnung von der VISU aus zu starten, basierend auf Prozentangaben. Dabei wollte ich sicherstellen, dass der Bediener genau 100.0 % in der Gesamtsumme eingibt. Vielen Dank!
Dann würdest du auf jedenfall sicherer fahren, wenn du jede eingegebenen Zahl als INT z.B. Faktor 10 ablegst. Dann die Summe durchführst und vergleichst.
ggf macht es sinn die Zahlen direkt auch auf dem HMI als INT anzugeben. Das ist dann etwas von der weiteren Aufgabenstellung und den zusätzlichen Berechnungen abhängig.
 
Wow, da habe ich etwas Neues gelernt. Es hängt also mit dem IEEE-754 Konverter für Fließkommazahlen zusammen... Wie würdet ihr eine Abfrage für 100.0 durchführen? Soll es in DINT umgewandelt und aufgerundet werden? Diese Freigabe war notwendig, um eine Berechnung von der VISU aus zu starten, basierend auf Prozentangaben. Dabei wollte ich sicherstellen, dass der Bediener genau 100.0 % in der Gesamtsumme eingibt. Vielen Dank!
Du musst auf einen Bereich abfragen. Mal angenommen, der Bediener kann in der Visu maximal 2 Nachkommastellen angeben, dann musst Du den Bereich nur klein genug wählen.
 
Zurück
Oben