Seite 1 von 1

Ungenauigkeiten bei Float-Variablen

Verfasst: 13.10.2013 13:28
von Lowrider39
Hallo Leutz,
ich weiß nicht, ob ich da was verkehrt mache oder was das ist. Hier das Problem:

Ich dimensioniere mir ein Array mit 16 Floatingpoint-Eintragungen. Diese werden dann hinterher besetzt. Gebe ich mir die Variable per Debug aus, hat sie rechenungenauigkeiten, die ich nicht gebrauchen kann.

Hier das Beispiel:

Code: Alles auswählen

Global Dim WireDiameterArray.f(15)

WireDiameterArray(0) = 0.1
WireDiameterArray(1) = 0.15
WireDiameterArray(2) = 0.22
WireDiameterArray(3) = 0.28
WireDiameterArray(4) = 0.35
WireDiameterArray(5) = 0.40
WireDiameterArray(6) = 0.50
WireDiameterArray(7) = 0.63
WireDiameterArray(8) = 0.75
WireDiameterArray(9) = 0.85
WireDiameterArray(10) = 1.0
WireDiameterArray(11) = 1.12
WireDiameterArray(12) = 1.32
WireDiameterArray(13) = 1.5
WireDiameterArray(14) = 1.8
WireDiameterArray(15) = 2.0

Debug WireDiameterArray(0)
Durch den Debug-Befehl wird der Array-Eintrag WireDiameterArray(0) einfach ausgegeben. Aller dings mit folgendem Ergebnis:

0.10000000149012

Nur manche der Einträge werden richtig angezeigt. Die meisten haben hinten diese 'Rundungsfehler'.

Re: Ungenauigkeiten bei Float-Variablen

Verfasst: 13.10.2013 13:39
von ts-soft
Wie wäre es mit der Boardsuche? Es gibt hier mit Sicherheit bereits hunderte Beiträge zu dem Thema!

Diese Ungenauigkeiten sind vollkommen normal und unvermeidbar. Ich kann nur empfehlen mit
Ganzzahlen zu arbeiten und diesen dann das Komma künstlich hinzuzufügen.
Also statt mit 2,43 € lieber mit 243 Cent Rechnen.

Re: Ungenauigkeiten bei Float-Variablen

Verfasst: 13.10.2013 13:41
von STARGÅTE
Also inzwischen habe ich das gefühl, diese Frage wird jeden Monat gestellt /:->
Aber ich bin stolz auf dich, dass du es nicht bei Bugs gepostet hast :allright:

http://de.wikipedia.org/wiki/Gleitkommazahl
Probleme mit ValF() und ValD()
Wie rechnet man mit Purebasic richtig?
Problem mit Floats...

Zahlen wie 0,1 ist in Computersystemen (Binärsystem) nicht darstellbar, das ist ähnlich wie 1/3 in dezimalschreibweise: 0,33333...
Daher muss irgendwann abgeschnitten werden.

Für mehr genauigkeit (keine 100%) gibt es Doubles.
Wenn du exakt 2 Stellen brauchst, nimmst du QUADs und dividierst erst bei der Anzeige durch 100.

Re: Ungenauigkeiten bei Float-Variablen

Verfasst: 13.10.2013 14:29
von Lowrider39
Danke erst einmal für die schnellen Antworten. Habe mir schon irgend so etwas gedacht. Ich werde die ganze Sache mal auf Ganzzahlen umstellen. Das wird dann auch schneller.
Sorry, dass ich nicht vorher gesucht habe. Stehe hier mitten in einem Projekt und wollte mir die Zeit sparen. Hat ja auch, dank eurer Hilfe geklappt.

Gruß Andreas

Re: Ungenauigkeiten bei Float-Variablen

Verfasst: 13.10.2013 14:29
von NicTheQuick
Das ist eine wiederkehrende Frage hier im Forum und hier die wiederkehrende Antwort:
Fließkommazahlen sind nicht dazu geeignet dezimale Zahlen genau darzustellen, da sie auf Binärbasis arbeiten. Für genaue Berechnungen muss man schon tiefer in die Trickkiste greifen und z.B. Festkommazahlen nutzen, die es in PB allerdings nicht nativ gibt. Als Beispiel: Wenn man mit Geld rechnet und Cent-Genauigkeit braucht, dann rechnet man eben gleich in Cent und nicht in Euro und nimmt dann dafür Ganzzahlen. Wenn man den Wert später irgendwo ausgeben will, kann man ihn immer noch entsprechend formatieren.

Hier noch weiteres dazu: Fließkomma-Arithmetik: Probleme und Einschränkungen

Edit:
Meine blöde fritz.box schmeißt mich die letzte Zeit immer aus dem Netz. Und als ich gerade abschicken wollte, hatte noch keine geantwortet. Jetzt hatte ich auch keine Lust mehr gar nichts abzuschicken, obwohl schon Antworten da sind. ^^