Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Rundungsfehler bei Floatoperationen? Kategorie: Programmierung Basic (von PeterS - 30.11.2008 23:02)
Als Antwort auf Rundungsfehler bei Floatoperationen? von Montelucon - 30.11.2008 10:38

> Hallo,
>
> leider eine mega groÃ?es Problem.
>
> Ich habe eine Uhr realisiert, die leider bereits nach sehr kurzer Zeit immer ungenauer wird.
> Am Anfang dachte ich es liegt an der Taktfrequenz die durch einen ungenauen Quarz abweicht.
> Doch es scheint an Rundungsfehlern zu liegen.

Hallo,

bei float Zahlen kann es immer zu Rundungsfehlern kommen. Aus der Wikipedia:

"Durch die unterschiedliche binäre Darstellung der Zahlen kann es in beiden Systemen zu Artefakten
kommen. Das heiÃ?t: Zahlen, die im Dezimalsystem â??rundâ?? erscheinen, zum Beispiel 12,45, können im
Binärsystem nicht exakt dargestellt werden. Statt dessen wird ihre Binärdarstellung abgeschnitten, so
dass man bei der Rückumwandlung ins Dezimalsystem den Wert 12,44999999900468785 erhält. Dieses
kann in nachfolgenden Berechnungen zu unvorhergesehenen Ab- oder Aufrundungsfehlern führen."

Entweder multiplizierst Du hoch und schneidest dann ab, oder besser noch verzichte auf float Zahlen.
Floating Point in 8-Bit CPUs wie den Mega32 oder Mega128 sind SEHR langsam und sollten falls möglich
vermieden werden.

Gruss Peter


>
> Beispiel:
> -------------------------------------------------------------------------------------------------------------
> Dim test As Single
> Dim hochrunter As Single
> Dim schrittweite As Single
>
> Sub main()
>        test = 35.0
>        hochrunter = -1.0
>        schrittweite = 0.2
>
>       Do While 1
>            rechne()
>       End While
> End Sub
>
> Sub rechne()
>        test = test + (hochrunter * schrittweite)
> End Sub
> -------------------------------------------------------------------------------------------------------------
>
> Das Ergbnis ist leider nicht wie erwartet:
>
> test = 34.80000
> test = 34.60000
>
> sondern
>
> test = 34.79999
> test = 34.79998
> usw.
>
> Was mache ich falsch, bzw. was kann ich machen um den Fehler zu beheben?
>
>
> GruÃ?
>
> Monte
>
>
>


    Antwort schreiben


Antworten:

Re: Rundungsfehler bei Floatoperationen? (von Montelucon - 1.12.2008 0:33)