ungenauigkeiten im Variablentyp



  • Hi
    (ich sehe den Wald vor lauter Bäumen gerade nicht)

    ich habe hier ne Methode die einen WInkel innerhalb der bekannten Grenzen halten soll

    double normAngle360(double fAngle)
    {
      fAngle = fmod(fAngle, 360.0);
    
      if (fAngle < 0.0) 
      {
        fAngle= fAngle + 360.0;
      }
    
    //da Werte ab fAngle= -1 * 10^-15  zu falschen Ergebnissen führt muss ich noch die Software hier erweitern
      if (360 == fAngle)
      {
        fAngle=0;
      }
    
      if (-0 == fAngle)
      {
        fAngle=0;
      }
    
      return fAngle;
    
      }  //  end of function normAngle360()
    

    trotzdem geschieht es bei mir in der SW irgendwann (aber ganz ganz selten), dass ein Winkel >=360° herauskommt.

    double wert=normAngle360( irgendein wert der mal vorliegt);
    .....
    if (wert >= 360.0)
    {
      cout  << Wert; // Auf dem Monitor steht dann ne "360"
       //Fehler
    }
    

    Nun die Frage.

    Gibt es ein automatisches Kasten von 360.0 auf float bzw. dann von 360 auf double?

    laut Doku sollte fmod auf jeden Fall double zurückliefern wenn double rein geht.
    Sieht jemand den Fehler irgendwo anders?

    Ich habe ja schon für diese werte nahe -0 schon nen workarround reinentwickelt..aber das scheint nicht zu reichen.

    Es scheint aber weiterhin irgendeine Unschärfe bei den Variablentypen zu geben, die ich bisher nicht erkannt habe.

    Folgende weitere Fragen ergeben sich.

    kann (+0 < 0.0) sein ?
    Ist ((+0) + 360) kleiner/gleich/größer 360 ?
    Ist ((-0) + 360) kleiner/gleich/größer 360 ?

    würde es schon reichen, wenn ich in der Methode normAngle360()

    if (360 >= fAngle)

    schreibe? Eigentlich macht das keinen Sinn, da fmod ja dieses Überschreiten der Grenze genau verhindern sollte...aber ich weiß es nicht.

    PS: kommt mir jetzt bitte nicht mit, das ist mathematisch nicht möglich..das weiß ich..aber sagt das dem Variablentypen.



  • Falsches Forum, hier ist C++/CLI, eine .NET Sprache, und nicht C++ oder C.


Anmelden zum Antworten