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.
Schande über mich! Das mit dieser Rechenungenauigkeit war mir tatsächlich noch nie aufgefallen.
Muss daran liegen, dass die Programmiersprachen, die ich bisher benutzt habe, intelligente Round-Befehle haben.
Offensichtlich scheinen hier einige Leute nicht zu
wissen, daß das Teil vor ihrer Nase das sie Rechner
nennen alles mögliche kann aber sicherlich nicht
richtig mit Floats rechen.
Gimbly hat geschrieben:Klar kann der arme round-Befehl 60.000004 nur zu 61 aufrunden, aber er darf nicht 100 * 0.6 zu 61 aufrunden.
Der Bug besteht natürlich dadrin, dass 100 * 0.6 falsch gerechnet wird.
Das kenne ich aus C und Delphi anders.
Das ist kein Bug. Du übersiehst nur was. Das 60.000004 nur zu 61 ist dir ja nun klar, liegt daran, das es ein Floatwert ist. Was du aber übersiehst ist, das "100 * 0.6" auch als Float berechnet wird. In der Berechnung kommt 0.6 vor, also ist das ein Float. Intern wir "100 * 0.6" also auch mit "100 * 0.00000004" (könnte mich jetzt um ne Stelle vertippt haben). Also ist 61 als Ergebnis wieder richtig.
Gruß
Thorsten
Die Redundanz in diesem Thread steigt enorm. Mittlerweile wurden sämtliche Punkte schon mehrfach erwähnt.
Selbst der Punkt, dass wir das jetzt schon mehrfach geklärt haben, haben wir hiermit schon zum zweiten Mal geklärt.
Froggerprogger hat geschrieben:Die Redundanz in diesem Thread steigt enorm. Mittlerweile wurden sämtliche Punkte schon mehrfach erwähnt.
Selbst der Punkt, dass wir das jetzt schon mehrfach geklärt haben, haben wir hiermit schon zum zweiten Mal geklärt.
Du wiederholst die Aussage von Zaphod
Beginne jeden Tag als ob es Absicht wäre! BILDblog
Benutz die Rundungsfunktion in der Rubrik Codeschnipsel!
Ansonsten bestehen Fließkommazahlen aus
einem Vorzeichen (1 Bit)
einer Charakteristik (ab 8 Bit) und
einer Mantisse (ab 23 Bit -> die Eins vor dem Komma wird nicht dargestellt!).
Versuche 0.6 als Mantisse 0<M<=1.1bin darzustellen:
1/2 1/4 1/8 1/8 ... 1/
0.5 -> 10...0 (ist einfach)
nun noch das restliche Zehntel darstellen
1/8 ist zu groß -> 1/16
bleiben 0.0375 usw.
Wie du siehst, ergibt sich zwangsläufig eine Rundung, weil nur Summen von Potenzen von 2 genau dargestellt werden können. So hast du beispielsweise bei 0.75 keinen Rundungsfehler.
Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Karl hat geschrieben:einem Vorzeichen (1 Bit)
einer Charakteristik (ab 8 Bit) und
einer Mantisse (ab 23 Bit -> die Eins vor dem Komma wird nicht dargestellt!).
Also ich nannte das bisher immer Exponent, aber man lernt ja nie aus. Wo hast du diesen Ausdruck her?
Beginne jeden Tag als ob es Absicht wäre! BILDblog