Der Böse Float

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Jan_

Ehemaliger Admin

Betreff: Der Böse Float

BeitragMo, Aug 29, 2005 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]

SetBuffer BackBuffer()
x# = 0.0
Repeat
Cls
x = x + 0.2
DebugLog x
If x=4 Then Stop
If x>3.9 And x<4.1 Then B=1
Text 0,0,x
If b=1 Then Text 0,20,\"wow. Floats sind wirklich böse\"
Flip
Until x=4.0
End

between angels and insects
 

BlackTermi

BeitragMo, Aug 29, 2005 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
den sinn deines Programmes kapier ich irgendwie nicht (muss aber nicht zwingend an dir liegen)
willst dun darauf hinweisen das x niemals 4 ist obwohl man immer + 0.2 rechnet?
 

DarkMike

BeitragMo, Aug 29, 2005 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, aber ne frage wiso is das so???????
2 dinge sind unendlich die menschliche Dummheit und das Universum obwohl beim Universum bin ich mir nicht ganz sicher. (Albert Einstein)

Ninja

BeitragMo, Aug 29, 2005 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hm interresant Smile
 

BlackTermi

BeitragMo, Aug 29, 2005 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
DarkMike hat Folgendes geschrieben:
ja, aber ne frage wiso is das so???????


Jan_ hat Folgendes geschrieben:
"wow. Floats sind wirklich böse"
 

KHORN

BeitragMo, Aug 29, 2005 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist normal.
Liegt also nicht an BB...
Ich habs in C++ auch probiert und da ist es genauso :/

Floats zum Abfragen ist nicht gut Rolling Eyes

Also genaue Floats abzufragen kann man vergessen.
Höchstens sowas :
BlitzBasic: [AUSKLAPPEN]
If x>3.9 And x<4.1 Then B=1


Laughing

Man sollte halt nicht soviele Floats verwenden, dass bringt unglück Wink
Am besten nur für sachen verwenden die man nicht abfragen muss.


Gruß KHORN

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Aug 29, 2005 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Liegt daran das Floats binär rechnen und es da zu kleinen Differenzen kommt!

Hier mal ein etwas anderes beispiel!
Mit periode Very Happy

1/3 +1/3 +1/3 = 1

Was denkt ihr macht Blitz daraus?
1.0
oder
0.99999

hier der Testcode: Shocked


BlitzBasic: [AUSKLAPPEN]
a#= 1.0/3.0 + 1.0/3.0 + 1.0/3.0

Print a#

WaitKey
[BB2D | BB3D | BB+]
 

DarkMike

BeitragMo, Aug 29, 2005 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Folgendes geschrieben:
Liegt daran das Floats binär rechnen und es da zu kleinen Differenzen kommt!

Hier mal ein etwas anderes beispiel!
Mit periode Very Happy

1/3 +1/3 +1/3 = 1

Was denkt ihr macht Blitz daraus?
1.0
oder
0.99999

hier der Testcode: Shocked


BlitzBasic: [AUSKLAPPEN]
a#= 1.0/3.0 + 1.0/3.0 + 1.0/3.0

Print a#

WaitKey


ja das weiss ich auch, aber o.2 + ... is nunmal irgendwann mal 4!!!
2 dinge sind unendlich die menschliche Dummheit und das Universum obwohl beim Universum bin ich mir nicht ganz sicher. (Albert Einstein)

Waveblue

BeitragMo, Aug 29, 2005 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/viewtopic.php?t=9514
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name
 

BlackTermi

BeitragMo, Aug 29, 2005 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
DarkMike hat Folgendes geschrieben:
Rallimen hat Folgendes geschrieben:
Liegt daran das Floats binär rechnen und es da zu kleinen Differenzen kommt!

Hier mal ein etwas anderes beispiel!
Mit periode Very Happy

1/3 +1/3 +1/3 = 1

Was denkt ihr macht Blitz daraus?
1.0
oder
0.99999

hier der Testcode: Shocked


BlitzBasic: [AUSKLAPPEN]
a#= 1.0/3.0 + 1.0/3.0 + 1.0/3.0

Print a#

WaitKey


ja das weiss ich auch, aber o.2 + ... is nunmal irgendwann mal 4!!!



genauso ist 1.0/3.0 + 1.0/3.0 + 1.0/3.0 = 0,99999...
und nicht 1!!!!!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Aug 29, 2005 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
genauso ist 1.0/3.0 + 1.0/3.0 + 1.0/3.0 = 0,99999...
und nicht 1!!!!!

Als Bruch ....
1/3 + 1/3 + 1/3 = 3/3
3/3 = 1
[BB2D | BB3D | BB+]

d-bug

BeitragDi, Aug 30, 2005 7:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Und genau deswegen brauchte ich einst diese kleine Funktion
https://www.blitzforum.de/viewtopic.php?t=12848

*hust*Nehmt lieber die von Xaron, die ist kürzer und macht das gleiche Wink*hust*

greetz
 

MegaTefyt

BeitragDi, Aug 30, 2005 7:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Da wurde aber ein ganz neues Thema aufgegriffen. *Ironie*

Als Programmierer sollte sowas zur Allgemeinbildung gehören. Fließkommazahlen werden intern nunmal binär gespeichert und da sind halt "normale" Kommazahlen wie z.B. 1.5 periodische Zahlen mit unendlich vielen Nachkommastellen und dann kommt es halt irgendwann zu diesen "Rundungsfehlern".
 

BlackTermi

BeitragDi, Aug 30, 2005 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Folgendes geschrieben:
Zitat:
genauso ist 1.0/3.0 + 1.0/3.0 + 1.0/3.0 = 0,99999...
und nicht 1!!!!!

Als Bruch ....
1/3 + 1/3 + 1/3 = 3/3
3/3 = 1



ups, naja, hmm, ja so gesehen hast du recht

Artemis

BeitragDi, Aug 30, 2005 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
BlackTermi hat Folgendes geschrieben:

genauso ist 1.0/3.0 + 1.0/3.0 + 1.0/3.0 = 0,99999...
und nicht 1!!!!!


ausserdem kann man periodische zahlen folgendermaßen schreiben:
0,Periode4 = 4/9
0,Periode5 = 5/9
0,Periode9 = 9/9 = 1
also entspricht 0,Periode9 der 1

Vertex

BeitragDi, Aug 30, 2005 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer 0.2 in Binär und wieder zurück in Dezimal umrechen kann, der bekommt ein Keks.
vertex.dreamfall.at | GitHub

DAK

BeitragDi, Aug 30, 2005 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Dezimal: 0,2 -> Binär: 0 -> Dezimal: 0

is übigens bei jeder zahl z < 1 z >= 0 so.

aber warum?
Gewinner der 6. und der 68. BlitzCodeCompo

Vertex

BeitragMi, Aug 31, 2005 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
32 Bit IEEE 754 Format du kleiner Krümelkacker!

Edit: Zumal es auch Binärzahlen in Kommadarstellung gibt!
vertex.dreamfall.at | GitHub

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group