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...
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 ...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.