Hallo, ich habe volgendes Problem:
1 | admw[1] = 813; |
2 | admw[0] = 828; |
3 | double wert; |
4 | wert = (7.0-4.0)/(admw[1]-admw[0]); |
5 | sprintf(buffer, "s=%4.2f ", wert); |
6 | lcd_string(buffer); |
Auf dem Display wird immer nur 0.00 ausgegeben. Warum ist das so?
|
Forum: Mikrocontroller und Digitale Elektronik AVR C Float-BerechnungHallo, ich habe volgendes Problem:
Auf dem Display wird immer nur 0.00 ausgegeben. Warum ist das so? Die Floatingpointlibrary wird vermutlich nicht gelinkt. Einfach im Handbuch deines Compilers nachschauen. Es liegt an der Division. Bei 1/3 zeigt er auch 0.00 an. Ich nutze einen ATmega328p , Was muss ich tun um den fehler zu korrigieren? Martin Fischer schrieb: > Was muss ich tun ... Die beiden Antworten beachten. Uns die Fehlermeldungen/Warnungen verraten. Und natürlich die richtigen Datentypen benutzen! 1/3 ist nicht das Gleiche wie 1.0/3.0 Martin Fischer schrieb: > Hallo, ich habe volgendes Problem: > admw[1] = 813; > admw[0] = 828; > double wert; > wert = (7.0-4.0)/(admw[1]-admw[0]); > sprintf(buffer, "s=%4.2f ", wert); > lcd_string(buffer); > > Auf dem Display wird immer nur 0.00 ausgegeben. > Warum ist das so? Gabs hier nicht schon mal so einen Fred von einem Herrn Martin Fischer, wo gefühlt tausend mal erklärt wurde, das die entsprechende Lib gelinkt werden muss? Ich bin mir ziemlich sicher, das dem so war... Beitrag "AVR-C double gibt auf LCd nur aus" Da wurde deine Frage mehr als ausreichend und auch viel zu oft beantwortet na ja, dieses mal wird er wohl die Bibliothek hinzugelinkt haben, weil er ja "0.00" (anstelle eines "?") erhält. Der Compiler macht während des Umrechnens bei bspw. einer Integerdivision KEINE Typumwandlung. Eine Disvision der Art: int z1; int z2; float ergeb; wird bei: z1= 6; z2= z2; ergeb= z1 / z2; für "ergeb" 0.00 ausgeben, weil das "richtige" Ergebnis 0.5 eben kleiner 1 ist und der Nachkommateil abgeschnitten wird. Um hier eine "korrekte" Anzeige zu erhalten muß bei der Rechnung das Typergebnis mit angegeben werden: ergeb= (float)(z1 / z2); zumindest im OP steht aber: Martin Fischer schrieb: > wert = (7.0-4.0)/(admw[1]-admw[0]); Damit ist das Abschneiden von Nachkommastellen durch Ganzzahlrechnung nicht das Problem. Vorausgesetzt, der Quelltext ist wirklich der betreffende. 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.
|
|