Probleme mit double werten

Gast #713278
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
#713288
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
#713317
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?
Gast #713402
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
Angehängte Dateien:
#713414
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.

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