Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++/CLI mit .NET ::  ungenauigkeiten im Variablentyp     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
HeroHolger
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.07.2011
Beiträge: 17
Beitrag HeroHolger Mitglied 16:23:03 21.08.2012   Titel:   ungenauigkeiten im Variablentyp            Zitieren

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

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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.

Code:
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.
Zitat:

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()
Zitat:
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.


Zuletzt bearbeitet von HeroHolger am 16:45:34 21.08.2012, insgesamt 10-mal bearbeitet
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 4079
Beitrag theta Mitglied 21:41:42 21.08.2012   Titel:              Zitieren

Falsches Forum, hier ist C++/CLI, eine .NET Sprache, und nicht C++ oder C.
c++.de :: C++/CLI mit .NET ::  ungenauigkeiten im Variablentyp   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.