-
        

Ergebnis 1 bis 7 von 7

Thema: Singlevariable hochzählen - zunehmender Fehler

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    10.10.2005
    Ort
    Nähe Biberach a.d. Riss
    Alter
    47
    Beiträge
    44

    Singlevariable hochzählen - zunehmender Fehler

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo zusammen!

    Ich addiere in einer Singlevariablen einen kleinen Zahlenwert (0,00027) fortlaufend auf.
    Das geht auch soweit ganz gut.
    Jedoch wird bei bei jeder Verschiebung des Kommas nach rechts ein Stückchen meines kleinen zu zählenden Zahlenwertes abgeschnitten und dadurch ungenauer bzw. mit einem größer werdendem Fehler addiert.
    Ist mein Zählerstand ausserdem bei 4096 angekommen, so wird der Zahlenwert nicht mehr aufaddiert; der Zähler bleibt stehen.

    Frage: Wie kann ich die kleinen Zahlenwerte genauer und vor allem mit mehr Stellen addieren?

    ...

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Das ist eines der Probleme, wie zahlen im PC/Controller gespeichert werden; da gibts nur ne beschränkte Genauigkeit.
    Ein Versuch wäre mal, statt Single einfach Double zu verwenden.
    Ne andere Möglichkeit: Ne Integer-Variable hochzählen, wie oft die 0,00027 addiert werden sollen; erst wenn das Ergebnis dann benötigt wird, direkt ausrechnen, also z.B. statt 500x zu schreiben y = y + 0,00027 einfach das hier:

    y1 = y1 + 1 (oder INCR y1)
    y2 = 0.00027

    Wird das Ergebnis gebraucht: y = y1 * y2
    #ifndef MfG
    #define MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    10.10.2005
    Ort
    Nähe Biberach a.d. Riss
    Alter
    47
    Beiträge
    44
    Das mit dem Double hab ich schon ein wenig probiert - hat aber nicht so recht hingehauen.
    Was ich vergaß zu sagen: Die "0,0027" ist nicht konstant, sondern ändert sich laufend. Das sind kleine Stückchen Amperstunden die sich in Abhängigkeit vom Strom laufend ändern.
    Ansonsten ist Dein Vorschlag gar nicht ohne - werd ich mir merken =D>
    Ich hab mir jetzt vorläufig so geholfen:
    Wenn die Singlevariable den Wert >= 1 erreicht wird diese gelöscht und eine Long-Variable inkrementiert.
    Nachteil: Je größer die "Stückchen" werden, desto höher wird der Fehler da ja der Wert ">=1" im Normalfall ein paar Nachkommastellen enthält die dann abgeschnitten werden.
    Vielleicht fällt mir noch was besseres ein!

    ...

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    ..wird diese gelöscht und eine Long-Variable .
    Du mußt ja nicht löschen. Ziehe 1.00000 davon ab.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Wieso rechnest Du nicht mit ganzen Zahlen (27 usw) und teilst am Ende durch 10000? Dann kannst Du Dir die Fließkommas bis auf die letzte Rechnung sparen. Besser natürlich noch mit Vielfachen von 2^x rechnen.
    In physikalischen Standard-Einheiten zu rechnen ist meist ineffizient. Am besten rechnet man am Ende erst um.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von enterprise30
    Was ich vergaß zu sagen: Die "0,0027" ist nicht konstant, sondern ändert sich laufend. Das sind kleine Stückchen Amperstunden die sich in Abhängigkeit vom Strom laufend ändern.
    Du wirst aber nicht den Wert 0,0027 messen, sondern doch wohl über den ADC einen Wert zwischen 0 und 1023 bekommen und diese dann umrechnen.
    Dann kannst du aber auch die ADC Wert in einer Long Variable addieren und später dann die Rechnung auf der Summe ausführen.
    Das ist dann doch so wie Jaecko vorgeschlagen hat.

    Gruß

    Rolf

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    10.10.2005
    Ort
    Nähe Biberach a.d. Riss
    Alter
    47
    Beiträge
    44
    He-He-He!!!
    So viele Vorschläge
    Ich hab eben mal (den ganzen Sonntagnachmittag *g*) meine Variante aus meinem 2. Beitrag getestet.
    Ergebnis: Fehler ist kleiner 0,1% - damit kann ich leben.
    @Gock: Das wär´s natürlich auch gewesen - schade daß ich den Beitrag erst jetzt gelesen hab - jetzt hab ich die Berechung schon fertig.
    Aber ich werd mir Deine Variante natürlich merken (echt clever!)
    Also Danke nochmal an alle!!!!

    Grüße, Jürgen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •