Forum: Compiler & IDEs Compiler compiliert falsch?!


von Rainer Stelzer (Gast)


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...

von Karl H. (kbuchegg)


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 ...

von Karl H. (kbuchegg)


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.

von Rainer Stelzer (Gast)


Lesenswert?

Vielen Dank - wieder etwas gelernt!

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.