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
@ 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
hallo, hat leider nix gebracht . hab das problem immer noch trotzdem danke
@ Peter Pan (Gast) >btw , was macht den die libm so? Da steckt die optimiere Fliesskommaarithmetik für den AVR drin. MFG Falk
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?
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
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.
ok, es liegt auf jedenfall an der ReferenzLuftdruckSenden(), habs gerade auch gemerkt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.