Forum: Compiler & IDEs Probleme mit double werten


von Peter Pan (Gast)


Lesenswert?

hi, ich muss einen wert per tastendruck hochzählen.

zb:

double wert = 99.9;
if(tastendruck) wert+=0.1;

wenn ich jez per tastendruck den wert 0.1 dazuaddiere hängt sich mein uC 
auf. wenn ich aber den wert 1 dazuaddiere klappt alles problemlos . gibt 
es probleme mit double werten beim avr? komm leider nicht um 
flieskommazahlen herum, da ich logarithmische funktionen brauche

von Falk B. (falk)


Lesenswert?

@ Peter Pan (Gast)

>double wert = 99.9;
>if(tastendruck) wert+=0.1;

>wenn ich jez per tastendruck den wert 0.1 dazuaddiere hängt sich mein uC
>auf. wenn ich aber den wert 1 dazuaddiere klappt alles problemlos . gibt
>es probleme mit double werten beim avr? komm leider nicht um

AFAIN nein, ausser dass double nur 32 Bit ist. Hast du die libm 
dazugelinkt? IN Den Optionene einstellbar. Wenns immer noch nicht geht, 
Probier mal

1
if(tastendruck) wert = wert + 0.1;

MFG
Falk

von Peter Pan (Gast)


Lesenswert?

hallo,
hat leider nix gebracht . hab das problem immer noch trotzdem danke

von Peter Pan (Gast)


Lesenswert?

btw , was macht den die libm so?

von Falk B. (falk)


Lesenswert?

@ Peter Pan (Gast)

>btw , was macht den die libm so?

Da steckt die optimiere Fliesskommaarithmetik für den AVR drin.

MFG
Falk

von Karl H. (kbuchegg)


Lesenswert?

Ich vermute mal, dass dein Problem weniger
die Addition an sich ist

   if(tastendruck) wert+=0.1;

sondern der Programmteil, der hinten nach 'wert' auswertet.
Es gibt so gut wie keinen Grund, warum die Addition an sich
nicht durchlaufen sollte und der Prozessor hängt.

Wenn du darauf spekulierst, dass 99.9 + 0.1 exakt 100.0
ergibt (oder eine andere ganze Zahl, bei genügend vielen
Tastendrücken) dann hast du dich wahrscheinlich verkalkuliert.

99.9 + 0.1 ergibt möglicherweise 99.999999 oder 100.0000001
oder sonstwas aber mit ziemlicher Sicherheit nicht 100.0
(Ich habe das exakte Ergebnis jetzt nicht verifiziert. Die
exakte Zahl ist letztendlich auch egal, wichtig ist, dass
floating point immer nur eine Approximation darstellt).

Also zeig mal etwas mehr Code. Welche Bedeutung hat wert,
was passiert sonst noch so damit?

von Peter Pan (Gast)


Angehängte Dateien:

Lesenswert?

so gerade erst nach hause gekommen.hier mal ein bischen mehr code.
so das problem liegt darin , das wenn ich zu dem wert 
Messwerte.Refenzluftdruck 0.1 addiere sich der uC aufhängt aber wenn ich 
1 dazuaddiere alles problemlos funzt

von Peter Pan (Gast)


Lesenswert?

das problem liegt genau in der zeile: case Bezugsluftdruck....

von Karl H. (kbuchegg)


Lesenswert?

Und wer sagt dir, dass dein Problem nicht in

ReferenzLuftdruckSenden()

passiert. Ist schliesslich die gleiche Zeile.

Hintergrund: Vergiss den gedanken, dass irgendwas im
Floating Point Code speziell auf 0.1 triggert und bei
1.0 ist alles paletti. Der Additionscode ist mit 99.9%
Wahrscheinlichkeit fehlerfrei. Und dem Additionscode
ist es sowas von egal ob er jetzt 0.1 oder 1.0 addieren soll.

von Peter Pan (Gast)


Lesenswert?

ok, es liegt auf jedenfall an der ReferenzLuftdruckSenden(), habs gerade 
auch gemerkt.

von Peter Pan (Gast)


Lesenswert?

ok ich habs gefunden, war an einer ganz anderen stelle :) troztem danke 
für eure hilfe :)

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.