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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren