| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| flashaholic Registriert seit: Oct 2001 Ort: Hanau
Beiträge: 303
| Versteh die Welt gerade nicht... Wo kommen die Rundungsfehler her???
Egal ob mit FDT oder in Flash Egal ob Flash Player 10 oder 11 Code: var sprite : Sprite;
sprite = new Sprite();
sprite.graphics.beginFill(0xffffff);
sprite.graphics.drawRect(0, 0, 50,50);
sprite.graphics.endFill();
sprite.alpha = 0.8;
trace('shape.alpha: ' + (sprite.alpha)); shape.alpha: 0.796875 Kann mir das jetzt mal einer erklären? Warum kann Flash bei mir nichrt mehr rechnen (Mein Preloader geht jetzt auch irendwie nicht ... sagt 0.99999999999) Sowhat von strange! :-) Gruß Crazy X
__________________ weltchefflasher.de - flashaholicblog |
| | |
| | #2 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.498
|
Zum einen gibt es bei int und floats immer Rundungsprobleme - das hat aber nichts mit Flash zu tun. Rundungsfehler?? Du wunderst dich jetzt vermutlich, warum das passiert, obwohl du nicht damit rechnest. Das liegt daran, dass der Alphawert mit 0 bis 1 angegeben wird, aber für die Dartstellung tatsächlich ja einen Wert von 0 bis 255 verwendet wird. Edit: Das liegt daran, dass der Alphawert -128 <= alpha < 128 als 8.8-Bit fixed point Wert gespeichert wird. (8 Bit für die Ganzzahl vor dem Komma, 8 Bit für die Nachkommastelle; so spart man sich 48 Bit im Vergleich zur Number (IEEE-754 double-precision floating-point number mit 64 Bit), welche ausgelesen wird) 0.8*256 = 204,8 -> verwendet wird aber nicht Number sondern Int, sprich auf 204 abgerundet beim Auslesen passiert also folgendes: 204/256 = 0,796875 mfg sx Edit: warum nicht durch 255 geteilt wird? kp Geändert von shin10 (22-12-2011 um 00:08 Uhr) |
| | |
| | #3 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Weil 8bit nunmal 256 Werte sind und nicht 255: 8 Bit = 1 Byte = 2^8 = 256 = 0 bis 255
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #4 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.498
|
Ja schon - vielleicht hab ich gerade nen Hänger, aber ich hätte da mit 0xFF gerechnet. weil ich bei 1 * 256 = 256 also 0x100 rausbekomme und nicht 0xFF wie gewünscht. Im Umkehrschluss würde ich also auch bei 0xFF/0x100 nur 0.99609375 statt 1 herausbekommen. Bin aber auch gerade etwas müde - weiß zumindest nicht, warum ich mich daran aufhäng. Häng doch das Offensichtliche einfach nochmal für mich ran. |
| | |
| | #5 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Du darfst nicht vergessen, die 0 mit zu zählen! Zahlen und Zahlensysteme sind eben 0 indiziert – genauso wie z.B. Arrays. Da ist ja auch array[ array.length-1 ] der größte mögliche Index und array[ array.length ] nicht definiert. Analog dazu hat z.B. das Dezimalsystem an jeder Stelle ja auch 10 mögliche Werte (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) und das Binärsytem 2 (0 und 1). Die namensgebende Zahl ist also nie als einzelnes Zeichen im System abbildbar sondern entspricht dem Wert 1 in der nächst höheren Stelle.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (21-12-2011 um 19:45 Uhr) |
| | |
| | #7 (permalink) |
| NCC 1701 D Registriert seit: Oct 2009 Ort: Metropolregion Hamburg
Beiträge: 586
|
Hallo Martin, hallo Shine, es stimmt, was Martin sagt. Die meiste Computerhardware und die meisten Computersprachen bilden Näherungswerte von reellen Zahlen mit Hilfe der Fließkommadarstellung IEEE 754. Aus Gründen der Hardware-Effiziens sind die meisten Fließkommadarstellungen Binärdarstellung. Binäre Fließkommadarstellungen können einfachen Zahlen wie 0.1 nicht exakt darstellen. Das ist nicht Actionscript spezifisch. ActionScript:
Geändert von speedjunkie (21-12-2011 um 20:08 Uhr) |
| | |
| | #8 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Im Endeffekt geht's doch hier um ein ganz simples Rundungsproblem: Rundung auf 2 Nachkommastellen im Dezimalsystem: Code: Math.round( 100 * 0.8 ) / 100 = 0.8 Code: Math.round( 0x100 * 0.8 ) / 0x100 = 0.796875
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (21-12-2011 um 20:18 Uhr) |
| | |
| | #9 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.498
|
Der Alphakanal gibt maximal 0xFF her, damit sind das für mich die 100%. Mit alpha hat eine Farbe 32 Bit - wenn das Maximum 0x100 sein sollten wären weir bei 33 Bit. So viel haben wir aber doch nicht. Und jetzt pass auf, ich hab mal folgendes gemacht: PHP-Code: Ich glaub da hat der Praktikant die LUT versaut. Geändert von shin10 (21-12-2011 um 23:30 Uhr) |
| | |
| | #10 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Ach Du redest von einem Bitmap-Alpha-Kanal?! Das ist etwas ganz anderes als das Alpha in der Displaylist. Hier geht darum möglichst viele werte in möglichst wenig Stellen speichern. Und in 2 hexadezimale oder 8 binäre Stellen passen nun einmal genau 256 Werte. Da macht es keinen Sinn aus quasi ästhetischen Gründen ein ganzes Bit (-1) zu verschenken, nur um auf eine runde Zahl zu kommen. Das ist so, als ob man dezimal nur die Zahlen von 0 bis 99 nehmen dürfte. Das sind genau 100 Werte. Will man aber die 100 dabei haben, braucht man 101 und eine ganze Stelle mehr (mit der man dann auch noch die Zahlen bis 999 bezeichnen könnte). Die dezimalen 101 entsprichen also den 257 im binär System.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #11 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.498
| Ja, auch. Ich wär davon ausgegangen, dass das nahezu einerlei ist/sein sollte. Bei Grafikkarten kann flash im Grunde ja auch maximal von 0xFF je Kanal ausgehen. Es scheint mir keinen Sinn zu machen, das in der DisplayList jetzt mit 0x100 anzugehen, wenn es dann doch zur letztendlichen Ausgabe wieder auf 0xFF umgerechnet werden muss. Auch in der Referenz; sieht man sich da mal die Formeln für die ganzen blendModes an, stellt man fest es wird immer mit 0xFF gerechnet. Ich finde es jedenfalls ziemlich seltsam. |
| | |
| | #12 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Die alpha-Werte in der Displaylist werden ja nicht direkt dargestellt, sondern sind Multiplikatoren für die zugehörigen Farbwerte. Von daher macht da der Datentyp Number (also 0x1.00) im Gegensatz zu int (also 0xFF) bei den Farbkanälen durchaus Sinn.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (22-12-2011 um 00:03 Uhr) |
| | |
| | #13 (permalink) | |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.498
|
Jap, hast Recht. Ich hab das hier gerade gefunden. Zitat:
| |
| | |
| | #14 (permalink) |
| flashaholic Registriert seit: Oct 2001 Ort: Hanau
Beiträge: 303
|
wow ![]() Danke für diese aufschlussreiche Diskussion. Ich glaube für mich kamen einfach mehrere Sachen auf einmal zusammen, so das ich erst mal etwas verwirrt war und auch als eher perfektionistischen/sauberen Programmierer nicht so ganz mit Leben wollte ![]() - Zum einen hatte ich nie Probleme mit meinem selbstgemachten und oft benutzten einjährigen Preloader - zum Anderen ist mir - was ich ja noch viel krasser finde - das mit dem alpha-"Rundungsfehler" noch nie in meinen mittlerweile über 10jähriger Flash-Karriere wirklich aufgefallen. Echt super interessant... jetzt kann ich wieder beruhigt weiterhin sauber Programmieren ![]() Danke! Gruß Crazy X für die Nachwelt dann nochmal kurz ein simples Beispiel: PHP-Code: Code: 0 0 0.09765625 0.09765625 0.19921875 0.19921875 0.296875 0.296875 0.3984375 0.3984375 0.5 0.5 0.59765625 0.59765625 0.69921875 0.69921875 0.796875 0.796875 0.8984375 0.8984375 1 1 ----------------------------- 0.09765625 0.19921875 0.296875 0.3984375 0.5 0.59765625 0.69921875 0.796875 0.8984375 1
__________________ weltchefflasher.de - flashaholicblog |
| | |
| | #15 (permalink) |
| NCC 1701 D Registriert seit: Oct 2009 Ort: Metropolregion Hamburg
Beiträge: 586
|
Wollt nur mal ein Link posten zu Arithmetik und Zahlenpräzision im Allgemeinen für AS3. bigdecimal - BigDecimal implementation for ActionScript 3. - Google Project Hosting |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Versteh die Welt nicht mehr! | pacman.hgw | Flash und Datenbanken | 5 | 24-01-2007 16:14 |
| ich versteh die welt nicht mehr !!!? | chriss | Flash MX | 2 | 23-05-2004 13:11 |
| ich versteh die Welt nicht mehr | peri | Flash MX | 5 | 10-04-2004 13:51 |
| Ich versteh die welt nicht mehr... | Lucas2002 | Flash 4 und Flash 5 | 5 | 28-08-2002 18:46 |
| ich versteh die welt nicht... | mattusi | HTML und CSS | 7 | 01-08-2002 14:01 |