www.mikrocontroller.net

Forum: Compiler & IDEs Compiler compiliert falsch?!


Autor: Rainer Stelzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wollte eine Funktion zur Umrechnung von Grad, Minuten und Sekunden
in Grad schreiben:

float dms2deg(float d, float m, float s)
{
  return d + (1/60 * m) + (1/3600 * s);
}


Leider funktioniert sie nicht! Ausgewertet werden immer nur ganze Grad,
die Wertangabe von Minuten und Sekunden wird einfach ignoriert - woran
könnte das liegen?!

Danke...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt daran, dass im Ausdruck

    1 / 60

beide Partner, also 1 und 60, ganze Zahlen sind. Folgerichtig
führt der Compiler, entsprechend den C-Regeln die Division als
int Division aus.
Der Rest sollte klar sein: 1 / 60 ausgeführt als int ergibt 0.

Wenn du die Division auf float umstellen willst, muss einer
der Partner oder beide ein float sein.
zb. so

    1.0f / 60

oder

    ((float)1) / 60

oder
     1 / 60.0f

oder
     1 / (float)60

oder ...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du, perverser weise, das ganze kürzer geschrieben
hättest:

   return d +  m / 60  +  s / 3600;

dann hätte es auf Anhieb funktioniert, da m und s schon float
sind.

Autor: Rainer Stelzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank - wieder etwas gelernt!

(War mir schon klar, daß es nicht an GCC liegt)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.