Forum: Compiler & IDEs Ziemliche Verwirrung bei Division und Cast AT32UC3C


von Tino W. (despotie)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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
von jgdo (Gast)


Lesenswert?

Tino Wolf schrieb:
> // Wert laut Debugger =
> 1324132542

Kann es sein, dass dein Debugger den Wert als Int anzeigt?

von Tino W. (despotie)


Lesenswert?

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