BlitzMax kann nicht rechnen - 100*2.55 = 254 ?!
Übersicht

![]() |
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


Powered by phpBB © 2001 - 2006, phpBB Group