Integer runden

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Alex 87
    Smart Home'r
    • 06.09.2017
    • 45

    #1

    Integer runden

    Guten Tag Gemeinde
    Ich habe festgestellt (so glaub ich zumindest), dass der Ganzzahl-Baustein sowie die im Baustein Formel vorhandene Funktion Int nicht immer richtig runden. Schaut euch mal das Bild im Anhang an. Mit diesen Zahlen und Formeln rundet's falsch.
    Integer heisst: Dezimalstellen werden abgeschnitten.
    Was ich will: Ich will aus 3 Dezimalstellen jede Stelle einzeln als Ganzzahl extrahieren.

    Frage und Bitte an euch: Habt ihr das gleiche Phänomen wie ich, wenn ihr meine Vorlage ausprobiert? Es müssen genau diese Zahlen eingegeben werden.
    Um eure Feddbacks wäre ich euch sehr dankbar.

    Auf meine Tickets bei Loxone hiess es zuerst: Bei mir funktioniert's richtig. Nach etwas nachhaken ist Funkstille.
    Danke euch
    Alex
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11238

    #2
    Das scheint ein klassischer Floatingpoint Error zu sein - irgendwo davor rechnet der Float mit zb 29,9999999999999 statt mit 30, und das zieht sich dann durch.
    Am besten in den Formeln alles INTen mit +0,5, das löst sowas in der Regel auf.
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • Alex 87
      Smart Home'r
      • 06.09.2017
      • 45

      #3
      Danke für die Rückmeldung.
      Das habe ich mir auch gedacht. Aber das kann's ja nicht sein, oder?! Irgendwann wir auch mit +0.5 mal wieder falsch 'geschnitten'.
      Dann ist es also so, dass das auch bei dir vorkommt?

      Kommentar

      • Christian Fenzl
        Lebende Foren Legende
        • 31.08.2015
        • 11238

        #4
        Ich hab gerade nicht die Möglichkeit, das zu testen, aber es ist eben ein generelles Problem bei der Arbeit mit Floats: https://en.m.wikipedia.org/wiki/Floa...ror_mitigation
        Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

        Kommentar

        • romildo
          Lebende Foren Legende
          • 25.08.2015
          • 5161

          #5
          Hallo,
          Der Fehler beginnt schon zu Beginn und ist davon abhängig ob es Vorkommawerte gibt. Siehe Bild Formelbaustein 1.
          Wieso dieser Fehler entsteht kann ich nicht sagen.

          Ich würde mit Ganzzahlen rechnen.
          Siehe Bild Formelbausteine 2-4

          Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Ganzzahl.png Ansichten: 0 Größe: 244,6 KB ID: 205083
          lg Romildo

          Kommentar

          • Alex 87
            Smart Home'r
            • 06.09.2017
            • 45

            #6
            Danke Kollegen
            Ich habe heute nach mehrfachem Nachhaken die Meldung von Loxone erhalten, dass bei ihnen auch nicht richtig gerundet wird und der Fall an die Entwickler geht.

            Der Vorschlag, nur mit Ganzzahlen zu arbeiten ist ja schon gut. Aber irgendwo gibt's eben Kommastellen. Ich kann das drehen wie ich will. Ab&zu wird falsch gerechnet und das geht beinahe 40 Jahren PC nicht wirklich, oder?
            Danke & LG Alex

            Kommentar

            • romildo
              Lebende Foren Legende
              • 25.08.2015
              • 5161

              #7
              =Alex 87;n205094...Aber irgendwo gibt's eben Kommastellen. Ich kann das drehen wie ich will. Ab&zu wird falsch gerechnet und das geht beinahe 40 Jahren PC nicht wirklich, oder?..
              Das wird auch Loxone nicht hinbekommen

              Das liegt daran, dass Binär gerechnet wird und eben nicht Dezimal.

              Ein einfaches Beispiel:
              Stelle die Konstante in Deinem Beispiel auf 300.125 und wähle als erste Formel:
              ((I1-I2)*1000)-95
              Du wirst sehen, Loxone kann das jetzt auch schon.

              Dezimal 0.125 ist als Fliesskommazahl 0.125
              mit 32 Bit Genauigkeit 00111110000000000000000000000000
              Hexadezimal: 0x3e000000
              Konvertierungsfehler: 0.000

              Dezimal 0.13 ist als Fliesskommazahl 0.12999999523162841796875
              mit 32 Bit Genauigkeit 00111110000001010001111010111000
              Hexadezimal: 0x3e051eb8
              Konvertierungsfehler: -4.76837158203125E-9

              Kleiner Unterschied grosse Wirkung.

              Christian Fenzl hat ja schon in #2 darauf hingewiesen.
              lg Romildo

              Kommentar

              • Alex 87
                Smart Home'r
                • 06.09.2017
                • 45

                #8
                ...und Loxone kann's nun doch: 'Int' im Formel-Baustein macht, was es soll. Der Ganzzahl-Baustein hat da immer noch seine Mühe - sprich kann's nicht.

                Kommentar

                • romildo
                  Lebende Foren Legende
                  • 25.08.2015
                  • 5161

                  #9
                  Ja, nun macht Int im Formel-Baustein was es soll.
                  Der Ganzzahl-Baustein macht möglicherweise nicht was Du Dir wünschst, er macht aber was er soll.

                  0.13 ist Binär nun mal nicht 0.13 sondern 0.1299...............
                  Loxone rechnet mit 32Bit (31Bit +1Bit für Vorzeichen) die angezeigte Zahl in Loxone wird aber auf die gewünschte Stelle aufgerundet.
                  Bei 3 Kommastellen wird 0.1299 somit auf 0.13 gerundet.
                  Am Eingang vom Ganzahl-Baustein kommen in Tat und Wahrheit somit nicht 0.13 sondern 0.1299...... an.
                  Für den Ganzahl-Baustein kommt somit an der zweiten Stelle eine 2 und an dritten Stelle eine 9 an.

                  Würde Loxone nur mit gerundeten Werten rechnen, also nur mit max. 3 Stellen hinter dem Komma, würde dies bei grösseren Berechnungen schnell zu falschen Ergebnissen führen.


                  lg Romildo

                  Kommentar

                  • Alex 87
                    Smart Home'r
                    • 06.09.2017
                    • 45

                    #10
                    Romildo, du hast ja recht, aber... wenn 0.13 nicht mehr 0.13 bleibt, ist das Resultat falsch. Loxone rechnet evtl. mit 32Bit, aber angezeigt werden maximal 3.So ist eben die Frage, wo gerundet wird und wie der Integer 'geformt' wird.
                    Wir können das so stehen lassen. Du hast recht, aber ich bin auch nicht falsch

                    Kommentar


                    • romildo
                      romildo kommentierte
                      Kommentar bearbeiten
                      Ja, wir können das Thema hier beenden, es ändert sich diesbezüglich doch nichts.
                      Habe nur versucht etwas Licht ins Dunkel zu bringen.

                      Ein letzter Hinweis von mir sei mir aber noch gegönnt.
                      0.13 gibt es nun mal im Binärsystem nicht und das wird Loxone auch nicht ändern können
                  Lädt...