astudio mit winavr float a = ?

Gast #1697341
Hallo!

Wenn ich ein Float mit 0 initialisiere, egal mit welcher Zahl und es 
dann via

  sprintf(s,"a:%f\r\n");
  uputs(s);

ausgebe, dann sehe ich nur a:?

Wo ist mein Fehler?

Wenn ich eine ausgelagerte Funktion (vom timerinterrupt ausgeführt) 
aufrufe, die Zugriff auf ein Float-array haben soll(via pointer 
übergeben) dann bekomme ich sogar einen Reset!
Gast
die variable gebe ich über die uart aus

an uputs() sollte dies erkennbar sein. Tausend Dank für die Info, dass 
ich sprintf erst floatingpoint-fähig machen muss. kann ich also davon 
ausgehen, dass meine berechnungen mit den floats funktioniert haben, 
dass wirklich nur die ausgabe via sprintf fehlerhaft war?
Gast
float temp;


temp =   (float)(adc/1024*5);
sprintf(s,"temp: %f\r\n",temp);
uputs(s);

erzeugt mir eine ausgabe von 0.000000 anstatt einen Wert anzuzeigen, ja, 
adc wird korrekt mit dem Wert angezeigt, wenn ich ihn ausgebe

warum bek. ich nur den Wert 0.0000 ist doch flasch!
Gast
Grundsätzlich kenne ich mich ja mit datentypen und deren umwandlung aus. 
Warum jedoch die Klammern einen fehler verursachen, ist mir nicht klar

wenn ich schreibe             a = 6/7/8/9;
ist das genau das gleiche wie a = (6/7/8/9);

also müsste:

a = (float) 7/2;
a = (float)(7/2);

auch das gleiche sein..... Was habe ich falsch programmiert?
Du willst in deinem Buch einmal das Kapitel über "Operator Precedence" 
(Reihung von Operatoren) durcharbeiten.

a = (float)(7/2);


dividiere 7 durch 2. Das ergibt 3.
Wandle das Ergebnis (3) um in einen float
Weise die float 3.0 an a zu


a = (float) 7/2;

Nimm den Integer 7
Wandle ihn in einen float.  Das ergibt 7.0f

Dann dividieren diese 7.0f durch 2.

Da 7.0f ein float ist, wird auch der Integer 2 zu einem float 2.0f 
umgewandelt.

Die Division, die zur Ausführung kommt, lautet also: 7.0f / 2.0f
Und das ergibt 3.5

Weise diese 3.5 an a zu.


Sieht so aus, als ob du mit Datentypen und deren Umwandlung und vor 
allen Dingen wie Operationen ausgewählt werden bzw. wie sie binden, doch 
nicht so vertraut bist, wie du denkst.


Das eigentlich schockierende an der Sache:
Dieser Sachverhalt (und noch viele andere triviale Dinge, die jeden Tag 
hier immer wieder gefragt werden) finden sich in jedem noch so grindigen 
C-Buch. Wenn man also ein C-Buch durchgearbeitet hätte, würde sich diese 
Fragestellung erst gar nicht stellen, weil das Grundlagen sind. Die 
Übungen im entsprechenden Kapitel einmal durchgearbeitet und man 
vergisst das nie wieder.
Gast
Ja gelesen habe ich den angegebenen link. dort steht nichts von 
klammern, die die zu castenen Daten umgeben.... Wie ich meine Sätze 
lesbarer gestalten kann, weiß ich nicht. Ich denke, dass man mich hier 
sehrwohl verstehen kann.


Karl heinz Buchegger schrieb:
> dividiere 7 durch 2. Das ergibt 3.

Ich dachte, dass im Code ein float value entsteht. Und, dass dieser 
ausschließlich zu einem int wird, wenn ich das Ergebnis dieser 
Berechnung einem int zuweise alla int a = 2/7 dann ist a = 3, das ist 
mir ja bewusst.

aber float a = (2/7) dass dann a = 3 sein soll.....
Gast
Timo P schrieb:
> Ich dachte, dass im Code ein float value entsteht. Und, dass dieser
> ausschließlich zu einem int wird, wenn ich das Ergebnis dieser
> Berechnung einem int zuweise alla int a = 2/7 dann ist a = 3, das ist
> mir ja bewusst.

das wäre ja schlimm, wenn jeden int berechnung intern als float laufen 
würde. Jeder Progamm würde exterm verlangsamt besonders bei CPU ohne 
float Unterstützung
Timo P schrieb:
> Ja gelesen habe ich den angegebenen link.

> Karl heinz Buchegger schrieb:
>> dividiere 7 durch 2. Das ergibt 3.
>
> Ich dachte, dass im Code ein float value entsteht.

Ich dachte, du hast den Link gelesen?

Was ist denn 7 (vom Datentyp her)
Was ist denn 3 (vom Datentyp her)

Welche Art der Division kommt daher zum Zug?

(Geh nochmal zum Link und lies den nächsten Abschnitt auch noch mit)
Timo P schrieb:
> so würde ich einfach schreiben float a = 7/(float)2
>
> dann erhalte ich meinem float-wert...

Ich würde ganz einfach schreiben

  float a = 7.0 / 2.0;

Wozu einen Integer erst umständlich auf einen float casten, wenn ich 
dieselbe Zahl auch gleich als Floating Point Zahl schreiben kann?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.