Ankündigung

Einklappen
Keine Ankündigung bisher.

mod Funktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    mod Funktion

    Hallo,

    mich bringt gerade die mod Funktion zur Verzweifelung.

    mod(2012u16, 19u16) ergibt 17

    mod(2012f16, 19f16) ergibt 0

    Mache ich hier mit der Nutzung von f16 einen Denkfehler oder ist das ein Bug?

    Viele Grüße

    Michael

    #2
    Zitat von Jambala Beitrag anzeigen
    Mache ich hier mit der Nutzung von f16 einen Denkfehler oder ist das ein Bug?
    Das sollte gar nicht gehen mit f16
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Zitat von enertegus Beitrag anzeigen
      Das sollte gar nicht gehen mit f16
      Warum nicht? Lt. Doku:
      Datentypen: uXX, sXX und fXX, mit XX beliebige auf Seite 113 definierte Bitlänge

      Kommentar


        #4
        Zitat von Sandman60 Beitrag anzeigen
        Warum nicht? Lt. Doku:
        Datentypen: uXX, sXX und fXX, mit XX beliebige auf Seite 113 definierte Bitlänge
        hm, da haste recht. Zumindest macht dann der Compiler erst mal alles richtig. Geht's denn mit f32?
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          sowohl bei f16 als auch bei f32 ergibt mod(2012fxx, 19fxx)= 0.0

          Kommentar


            #6
            Eine Modulo-Funktion mit Fließkommazahlen auf dem EibPC auf rechnerische Art zu lösen, führt auch in eine Sackgasse.

            Ziel war ja eigentlich A = mod(2012f16, 19f16) = 17.0 zu erhalten.

            Als manuellen Weg habe ich diesen gewählt:

            A = 2012f16 - convert(2012u16 / 19u16 * 19u16, 0f16)
            Das Ergebnis ist jedoch 16.64

            Zur Kontrolle habe ich diese Hilfsvariablen angelegt:

            A1 = 2012f16
            A2 = 2012u16 / 19u16 * 19u16
            A3 = convert(2012u16 / 19u16 * 19u16, 0f16)

            Die Hilfsvariablen werden im Debugger wie folgt angezeigt:

            A1 = 2012.16
            A2 = 1995
            A3 = 1995.52

            Ich hätte erwartet dass 2012f16 = 2012.0 ist.

            Aus welchem Grund muß zwingend 2012.0f16 benutzt werden?

            De Fakto ist aber auch manuell keine Lösung möglich weil durch einen Fehler in der convert-Funktion selbst A = 2012.0f16 - convert(2012u16 / 19u16 * 19u16, 0f16) keine 17.0 ergibt, sondern 16.64.

            Viele Grüße

            Michael

            Kommentar


              #7
              Hallo Michael,

              aus meiner Sicht gibt es in diesem Thema zwei ToDos für Euch.

              Die mod-Funktion sollte entweder generell nicht mit Fließkommazahlen funktionieren, also einen Compiler-Fehler liefern und so auch dokumentiert sein, oder aber wie in anderen Programmiersprachen auch mit Fließkommazahlen ein korrektes Ergebnis liefern. Aktuell liefert die Funktion bei Nutzung von f16 oder f32 Werten immer das Ergebnis 0.0

              Die Funktion convert(2012u08, 0.0f16) liefert zur Zeit die Rückmeldung 2012.16f16, erwarten würde ich hier 2012.0f16. Bitte überprüft was die Ursache dafür ist. Das 1-Wire Makro von Bernd liefert aus dem gleichen Grund z.B. bei 85°C den Wert 85,04°C.

              Viele Grüße

              Michael

              Kommentar


                #8
                Zitat von Jambala Beitrag anzeigen
                De Fakto ist aber auch manuell keine Lösung möglich weil durch einen Fehler in der convert-Funktion selbst A = 2012.0f16 - convert(2012u16 / 19u16 * 19u16, 0f16) keine 17.0 ergibt, sondern 16.64.
                Versuch doch mal den wesentlichen Schritt zu Kapseln:
                A = 2012.0f16 - convert( convert(2012u16 / 19u16, 0u16) * 19u16, 0f16)

                Meine Vermutung ist eher ein Problem in der Darstellung von f16, was ja schon 2012f16 zeigt. Wenn der eibPC zur Berechnung bereits in f16/f32 konvertiert und dadurch die Nachkommastellen behält, diese aber auch noch falsch sind, wäre es eine Erklärung für den Fehler.

                Ob natürlich am Ende auch intern convert() für die Umwandlung in unterschiedliche Darstellungen verwendet wird ...
                BR
                Marc

                Kommentar


                  #9
                  Hallo Marc,

                  ich habe ja schon alle einzelnen Berechnungen abgekapselt, aber schon convert(2012u08,0.0f16) ergibt nicht 2012.0 sondern 2012.16 ...

                  Viele Grüße

                  Michale

                  Kommentar


                    #10
                    Klar, f16 hat einen Problem, evtl. kannst du es umgehen, wenn du auf f32 umstellst?
                    BR
                    Marc

                    Kommentar


                      #11
                      Jepp, nach der sauberen Herleitung des f16 Themas durch BMX habe ich es mit f32 ausprobiert und nun läuft der convert korrekt durch.

                      Also ab jetzt ist f32 für mich Standard und f16 wird nicht mehr genutzt.

                      Viele Grüße

                      Michael

                      Kommentar


                        #12
                        Zitat von Jambala Beitrag anzeigen
                        Also ab jetzt ist f32 für mich Standard und f16 wird nicht mehr genutzt.
                        Ich meine das auch schon mal so empfohlen zu haben, wobei eben nicht so überzeugend dargestellt...
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          Leider scheitert die konsequente Nutzung von f32 aber an Funktionen wie mpchart.

                          Ich hatte mich gerade schon gefreut mit f32 meine Skalierungen mit x Nachkommastellen loszuwerden, aber mpchart schreibt f16 zwingend vor.

                          Solltet Ihr dies vor dem Hintergrund der Herleitung von Bernd dann nicht auch besser anpassen?

                          Viele Grüße

                          Michael

                          Kommentar


                            #14
                            Zitat von enertegus Beitrag anzeigen
                            Ich meine das auch schon mal so empfohlen zu haben, wobei eben nicht so überzeugend dargestellt...
                            Ich hab mal nen Merker gesetzt

                            Zitat von Jambala Beitrag anzeigen
                            Solltet Ihr dies vor dem Hintergrund der Herleitung von Bernd dann nicht auch besser anpassen?
                            BR
                            Marc

                            Kommentar


                              #15
                              Zitat von Jambala Beitrag anzeigen
                              Die Funktion convert(2012u08, 0.0f16) liefert zur Zeit die Rückmeldung 2012.16f16, erwarten würde ich hier 2012.0f16.
                              Darüber ärger und beschwer ich mich ja glaub ich schon seit einem Jahr. Aussage von Michael war sinngemäß "Genauer geht es aufgrund der KNX-Logik nicht". Was m. E. unlogisch ist, weil a) der EibPC sich intern nicht an das KNX-Varibalen-Format halten muss und b) auch damit ein 2012.0 abbildbar ist.
                              Eigentlich wollte Michael das an seine Firmware-Jungs geben, aber Rückmeldung ahb ich dazu noch keine....
                              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                              Kommentar

                              Lädt...
                              X