Hallo, ich habe volgendes Problem:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Auf dem Display wird immer nur 0.00 ausgegeben. Warum ist das so?
|
Anzeige
|
AVR C Float-BerechnungHallo, ich habe volgendes Problem:
Auf dem Display wird immer nur 0.00 ausgegeben. Warum ist das so?
Gast
#3605863
und von welchem Type ist admw?
Gast
#3605866
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?
Gast
#3605902
Martin Fischer schrieb: > Was muss ich tun ... Die beiden Antworten beachten. Uns die Fehlermeldungen/Warnungen verraten.
Gast
#3605908
Und natürlich die richtigen Datentypen benutzen! 1/3 ist nicht das Gleiche wie 1.0/3.0
Gast
#3605931
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...
Gast
#3605934
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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|