AVR C Float-Berechnung

Gast #3605931
Lesenswert?

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...
#3606088
Lesenswert?

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);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren