www.mikrocontroller.net

Forum: Compiler & IDEs Probleme mit double werten


Autor: Peter Pan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

if(tastendruck) wert = wert + 0.1;

MFG
Falk

Autor: Peter Pan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
hat leider nix gebracht . hab das problem immer noch trotzdem danke

Autor: Peter Pan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
btw , was macht den die libm so?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter Pan (Gast)

>btw , was macht den die libm so?

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

MFG
Falk

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Pan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Pan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das problem liegt genau in der zeile: case Bezugsluftdruck....

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Pan (Gast)
Datum:

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

Autor: Peter Pan (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.