www.mikrocontroller.net

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


Autor: Jens Großmann (Firma: fa. Seuffer) (willi-helmchen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
forredner == Vorredner ;)

Autor: Jens Großmann (Firma: fa. Seuffer) (willi-helmchen)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.