BlitzMax kann nicht rechnen - 100*2.55 = 254 ?!
Übersicht
BlitzMax, BlitzMax NG
Allgemein|
|
Der EisvogelBetreff: BlitzMax kann nicht rechnen - 100*2.55 = 254 ?! |
Antworten mit Zitat |
|---|---|---|
|
Hallo
Ich bin gerade auf etwas komisches gestoßen. Ich habe in meinem Programm eine Alpha-Channel Angabe in Prozent. Um diese in ARGB-Werten zu verwenden, multipliziere ich a mit 2.55 um auf die eigentlichen Werte zu kommen, aber ob ihrs glaubt oder nicht: BlitzMax ist nicht in der Lage 100 * 2.55 zu rechnen. Überzeugt euch selbst mit diesem Code: BlitzMax: [AUSKLAPPEN] Local a:Int = 100 Ich bekomme als Ausgabe 254. Ist dies ein exterm dummer Fehler meinerseits, oder ist das wirklich ein Fehler in BlitzMax? Kann ich das irgendwie verhindern? MfG Der Eisvogel |
||
|
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
||
|
|
XeresModerator |
Antworten mit Zitat |
|---|---|---|
BlitzMax: [AUSKLAPPEN] Local a:Int = 100Kommastellen sind etwas Fehlerbehaftet. |
||
|
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) |
||
|
|
Der Eisvogel |
Antworten mit Zitat |
|---|---|---|
| Oha, das ist aber öde. Danke Dir. Sieht aber nicht schön im Code aus. | ||
|
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
||
|
|
XeresModerator |
Antworten mit Zitat |
|---|---|---|
|
Integer-Rechnung ist ja auch vor zu ziehen - erst eine Float daraus machen, wenn du sie brauchst.
Code: [AUSKLAPPEN] Local a:Int = 100
a = (a * 255) / 100.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 Mi, Nov 24, 2010 22:12, insgesamt einmal bearbeitet
|
|
Der Eisvogel |
Antworten mit Zitat |
|---|---|---|
| OK, das sieht schöner aus. Danke. | ||
|
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
||
|
|
BladeRunnerModerator |
Antworten mit Zitat |
|---|---|---|
| Das ist allerdings kein BMax-Spezifisches Problem, sondern einfach eines was Flieskommazahlen allgemein betrifft. Du kannst die Fehler minimieren indem Du doubles nimmst, aber auch da wird es Ungenauigkeiten geben. | ||
|
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
||
|
|
mpmxyz |
Antworten mit Zitat |
|---|---|---|
|
Das sind normale Ungenauigkeiten, die beim Rechnen mit Floats/Doubles auftreten.
Bei der Umwandlung in einen Integer wird nämlich nur abgerundet. Ich weiß jetzt nicht, ob eine Rundungsfunktion schon vorhanden ist, aber diese hier sollte das richtig machen: BlitzMax: [AUSKLAPPEN] Function Round:Long(num:Double) mfG mpmxyz PS: Da war ich aber langsam. |
||
|
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
||
Macintosh |
Antworten mit Zitat |
|
|---|---|---|
| zu spät. | ||
Übersicht
BlitzMax, BlitzMax NG
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group
