Ungenauigkeiten bei Float-Variablen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lowrider39
Beiträge: 6
Registriert: 20.11.2008 19:28
Wohnort: Wilnsdorf
Kontaktdaten:

Ungenauigkeiten bei Float-Variablen

Beitrag 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'.
egal was du suchst, die Antwort auf alle Fragen nach dem Leben, dem Universum und allem ist ...... 42
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Ungenauigkeiten bei Float-Variablen

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ungenauigkeiten bei Float-Variablen

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Lowrider39
Beiträge: 6
Registriert: 20.11.2008 19:28
Wohnort: Wilnsdorf
Kontaktdaten:

Re: Ungenauigkeiten bei Float-Variablen

Beitrag 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
egal was du suchst, die Antwort auf alle Fragen nach dem Leben, dem Universum und allem ist ...... 42
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ungenauigkeiten bei Float-Variablen

Beitrag 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. ^^
Antworten