flash - Mi computadora se volvió estúpida. 0+20=19.921875 !!! ¡Ayuadame!
actionscript actionscript-2 (5)
Sabes que es una mierda, ¡todo cuando tu computadora no puede obtener una suma correcta!
No tengo la menor idea de por qué está sucediendo esto:
_root.attachMovie("clippy","aClip",_root.getNextHighestDepth());
trace("alpha 1 = "+aClip._alpha);
aClip._alpha = 0;
trace("alpha 2 = "+aClip._alpha);
aClip._alpha += 20;
trace("alpha 3 = "+aClip._alpha);
aClip._alpha = 20;
trace("alpha 4 = "+aClip._alpha);
La salida es:
alpha 1 = 100
alpha 2 = 0
alpha 3 = 19.921875
alpha 4 = 19.921875
19.921875 debería ser 20! :(
Voy a llorar. ¿Mi procesador tiene cáncer? Alzheimer? ¿Quién dijo que las computadoras no cometen errores?
PD: también utilicé aClip._alpha = Math.round (aClip._alpha) pero la traza era la misma.
Si recuerdo bien, flash almacena alfa internamente con un extraño valor loco, algo así como 0..240 (no creo que sea 255). ¿Podría ser que tome 20 para ser 20%, y después del redondeo, 19.92 es el valor más cercano una vez que se convierte de nuevo a un porcentaje?
redondeando parece
Independientemente de la validez de otras respuestas, existen artefactos conocidos y bien documentados de la implementación de punto flotante que, entre otros, usa Adobe Flash Player. El siguiente código, por ejemplo, producirá un resultado ligeramente incorrecto (si existe tal cosa en matemáticas) de 1.0010000000000001
:
trace(0.1009 + 0.9001);
Todo esto, como dije, es parte del uso de una implementación de especificación de punto flotante IEEE.
_alpha
valores _alpha
se almacenan como un byte (debería decir 8 bits, un valor entero de 0
a 255
)
Cuando establece un valor _alpha
, usa un porcentaje. Cuando lo recupera, produce una representación decimal exacta del porcentaje.
aClip._alpha = 20;
20%
de 256
es 51.2
, ya que se almacena como un entero, quedará a 51
.
Entonces,
51 / 256 * 100
es como Flash te lo devuelve, que es 19.921875
.
El "problema flotante" también se produjo en el cuadro de propiedad del componente en Flash CS5. Después de una nueva instalación, CS5 parece una locura con las propiedades de los componentes, y da 20.00001 después de escribir 20.
La actualización de su software gracias a Adobe Application Manager corrige este problema.