Forum: Mikrocontroller und Digitale Elektronik Integer an float zuweisen oder die Frage wie ich dividieren kann


von Jens G. (Firma: fa. Seuffer) (willi-helmchen)


Lesenswert?

Hallo,
ich hab mal eine Frage, kann in eine Float einfach in eine Integer 
umwandeln in dem ich folgendes mache

int a = 0x1500;
float b = 0;

b = a;

oder bekomm ich da einen falschen Wert?

Hintergrund ist, ich habe wie vlt der ein oder ander in meinem anderen 
Thread gelesen hat aus einem Array A/D Werte 2 bestimmte rausgesucht um 
daraus eine Gerade zu bestimmen. Diese Werte sind nun in Integer.
Wenn ich nun über die 2 Punkt Geradengleichung die Gerade bestimmen will 
muss ich ja zwangsläufig eine Division durchführen.
Wenn ich jetzt die 2 Integer Teile, geht mein dsPIC33 in Reset. ich 
schätze mal das es daran liegt, das das Ergebniss eine Kommazahl ist.
Oder hab ich da nen Denkfehler

von Johannes M. (johnny-m)


Lesenswert?

Jens Großmann wrote:
> Wenn ich jetzt die 2 Integer Teile, geht mein dsPIC33 in Reset.
Halte ich für unwahrscheinlich, es sei denn, Du hast einen anderen Bock 
drin (evtl. Division durch Null?)...

> ich
> schätze mal das es daran liegt, das das Ergebniss eine Kommazahl ist.
> Oder hab ich da nen Denkfehler
Das Ergebnis einer Integer-Division ist immer auch ein Integer! Und 
bevor Du anfängst, für eine popelige Geradengleichung mit 
Gleitkommageschichten zu wurschteln, schau Dir mal den Artikel zum Thema 
Festkommaarithmetik an.

von Gast (Gast)


Lesenswert?

>b = (float)a;

das geht ohne Fehler. Aber rechne doch zum Beispiel nicht mit Volt 
sondern miliVolt dann hast du schon 3 Nachkommastellen.

wie der forredner sagte:
<schau Dir mal den Artikel zum Thema Festkommaarithmetik an.

von Gast (Gast)


Lesenswert?

forredner == Vorredner ;)

von Jens G. (Firma: fa. Seuffer) (willi-helmchen)


Lesenswert?

Hy, danke erst mal für die schnelle Antwort.
Dein Tip mit der Division durch Null war glaub die richtige Fährte. ich 
habe vor die division jetzt eine If-Schleife gemacht, die abfragt ob der 
Teiler ungleich Null und dann die Division durchführt und siehe da es 
geht.

Ich denk mal der Fehler lag daran das die Division durchgeführt wurde 
bevor die Werte des ADC vorliegen, und da ich bei der Inizialisierung 
der Integer diese auf 0 gesetz habe ging das ganze schief

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.