Compiler compiliert falsch?!

Gast #411751
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...
#411752
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 ...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.