Grundlegende Frage zu Float/Double Variablen
Übersicht

![]() |
SkabusBetreff: Grundlegende Frage zu Float/Double Variablen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin schon mehre Male auf eine kuriose Tatsache gestoßen, die aber zum Glück bissher immer umgangen werden konnte...
Nun stellt sie mir ein ziemliches Bein.Problem ist folgendes. Aus der normalen Mathematik wissen wir, dass wenn wir einen Wert um eine gebrochenrationale Zahl verringern oder vergrößern wir bei entsprechender Einstellung wieder auf eine ganze Zahl kommen. Beispiel: Wenn ich 1/2 + 1/2 rechne bekomme ich ein Ganzes, was eine ganze Zahl darstellt. Und wenn ich 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 rechne bekomme ich ebenfalls ein ganzes raus, bzw. wenn ich 10 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1 rechne, so bekomme ich eine glatte 9... Scheinbar will BMax das nit, und ich hab kA warum.Sicher liegt es daran, dass sowohl float als auch double bösartig runden,intern, und ich deswegen, mich zwar im oben genannten Beispiel, der 9 annähre sie aber nicht erreiche, bzw, über sie hinaus gehe. Leider benötige ich genau diese Beziehung und genau dieses glatte Ergebnis und kann programmbedingt auch nicht einfach in Int konvertieren.Weil für ihn dann z.b. 9.2 und 9.3 ein und das selbe wären, was mein Programm allerdings nicht korrekt arbeiten lässt... Wäre nett wenn mir jemand sagen könnte, was ich evtl. falsch mache, oder wie ich dieses Problem umgehen kann. Für jegliche Hilfe bin ich wie immer sehr dankbar^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Rechne stattdessen:
100 - 1 - 1 ... und ermittle das Endergebnis erst zum schluss: Ergebnis / 10.0 |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am Mo, Dez 28, 2009 17:31, insgesamt einmal bearbeitet
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahja, ich bin blöd ![]() Da hätte ich selber drauf kommen müssen.Dank dir^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eigentlich traurig das die mangelnde Genauigkeit bei einem Float einen dazu zwingt Performance zu verschenken. | ||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich wage zu bezweifeln, das der Unterschied in der Berechnungszeit zwischen 100 - 1 und 10-0.1 so groß ist, dass man hier von "Performance" verschenken sprechen kann. Ganz im Gegenteil ich gehe sogar davon aus, das es für den Computer "einfacher" sein müsste 100 - 1 zu rechnen als 10-0.1
MfG ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hat Folgendes geschrieben: Ich wage zu bezweifeln, das der Unterschied in der Berechnungszeit zwischen 100 - 1 und 10-0.1 so groß ist, dass man hier von "Performance" verschenken sprechen kann. Ganz im Gegenteil ich gehe sogar davon aus, das es für den Computer "einfacher" sein müsste 100 - 1 zu rechnen als 10-0.1
MfG ich aber wenn man eben nicht 100 - 1 will, sondern 10 - 0.1 und demnach noch /10 machen muß... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau, an der Division wirds hängen bleiben,
Ich mach grade mal en Benchmark, Edit kommt gleich. EDIT: OMG, folgender Benchmark Code: BlitzBasic: [AUSKLAPPEN]
Ergibt folgende erstaunliche Ergebnisse: 10.000 cycles Float: 2ms Int mit Div/Mult: 0ms 50.000 cycles Float: 8ms Int: 4ms 1.000.000 cycles Float: 152ms Int: 71ms FAZIT: Mit Integer und Umwandlung geht es doppelt so schnell, obwohl dividiert wird. UND die Genauigkeit ist so wie sie sein soll! |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Integer sind nunmal grundsätzlich schneller als Floats, da das Rechnen damit unkomplizierter ist.
Dafür, dass bei Floats und Doubles Fehler auftreten, kann übrigens BlitzMax nichts. Der Computer speichert Zahlen intern binär, und deine 0.1 beispielsweise ergibt in binär eine Zahl mit unendlich vielen Nachkommastellen. Daher muss der Computer bei jedem Rechenschritt runden und das Ergebnis wird dementsprechend ungenau ![]() Was genau dann am Ende herauskommt, hängt davon ab, wie du rechnest: BlitzMax: [AUSKLAPPEN]
|
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mir is schon klar das BlitzMax nichts dafür kann, aber andere Compiler rechnen das Floatergebnis automatisch intern um und belässt es nicht bei dieser Floatingpoint-Arithmetik...
Ich wusste nur nicht, dass BMax das intern nicht macht und daher das Ergebnis ungenau wird^^ Aber zum Glück ist die Lösung mit Integer elegant und schnell ![]() MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group