Hallo Miteinander, im Moment bin ich ziemlich am Zweifeln meiner Fähigkeiten und ersuche nun Rat bei Euch! Kurz vorweg, ich verwende den Mikrocontroller AT32UC3C0512C und programmiere mit Atmel Studio 6.2 und nutze den AVR32/GNU C Compiler. Folgendes Problem: Zur Interpolation zwischen zwei Messpunkten führe ich zunächst eine Berechnung der Steigung zwischen diesen durch. Dafür ist eine Division nötig. float m = 0.0; int dy = bla; int dx = blabla; m = (float)dy/(float)dx; Gewünscht wäre zum Beispiel m = 1.0 / 13.0; Um eine Kommazahl zu erlangen, verwende ich den float - Cast. Meine Erwartung war natürlich eine Kommazahl in m. Irgendwo hatte ich gelesen, dass eine Division auf einem AVR32 Controller für Kommazahlen nicht unterstützt wird. Aus diesem Grund habe ich einfach meine Int-Werte vergrößert, bei denen die Division durchgeführt wird und wollte danach den Cast auf float durchführen um dann mit einem Faktor von z.B. 0.0001 zu multiplizieren. Jedoch funktioniert der cast nicht. In der Variablen steht beim debuggen nach dem cast jedesmal eine willkürliche Zahl drin! Debug: int k = 13; float l = 0.0; . . . l = (float) k; // erwarteter Wert = 13.0 // Wert laut Debugger = 1324132542 Ist da grundsätzlich etwas verkehrt? Gibt es ne andere Möglichkeit zu dividieren? Grüße
Tino Wolf schrieb: > Irgendwo hatte ich gelesen, dass eine Division auf einem AVR32 > Controller für Kommazahlen nicht unterstützt wird. Wo C ist, da gibt es die Division. Die Frage ist nur, womit sie durchgeführt wird. In Hardware oder in Software. Wenn du Fliesskommatypen verwendest und die Hardware das nicht kann, dann macht es Software. Was bei 32-Bittern so katastrophal nicht ausfällt. Aber wenn du jegliche solche Fliess- oder Gleitkommarechnung in Software vermeiden willst, dann bleibt Festkommaarithmetik.
:
Bearbeitet durch User
Tino Wolf schrieb: > // Wert laut Debugger = > 1324132542 Kann es sein, dass dein Debugger den Wert als Int anzeigt?
jgdo schrieb: > Kann es sein, dass dein Debugger den Wert als Int anzeigt? Guter Tipp! Ich habe ein bisschen herumprobiert und musste feststellen, dass der Wert im Speicher nicht im BigEndian Format angezeigt wurde. Nach der Umstellung steht alles korrekt da. Die Division funktioniert nun auch! Sehr peinlich :/ Trotzdem vielen Dank.
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.