Мой компьютер стал тупым.0 + 20 = 19,921875 !!!Помоги мне! - PullRequest
8 голосов
/ 30 июля 2010

Вы знаете, что все глючит, когда ваш компьютер не может правильно определить сумму!

Я понятия не имею, почему это происходит:

_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);

Вывод:

alpha 1 = 100
alpha 2 = 0
alpha 3 = 19.921875
alpha 4 = 19.921875

19,921875 должно быть 20! (

Я заплачу. У моего процессора рак? Болезнь Альцгеймера? Кто сказал, что компьютеры не делают ошибок?

P.S. Я также использовал aClip._alpha = Math.round (aClip._alpha), но трассировка была та же!

Ответы [ 5 ]

23 голосов
/ 30 июля 2010

_alpha значения хранятся в байтах (я бы сказал, 8 бит - целочисленное значение от 0 до 255)

Когда вы устанавливаете значение _alpha, вы используете процент,Когда вы извлекаете его, он выдает точное десятичное представление в процентах.

aClip._alpha = 20;

20% из 256 равно 51.2, так как оно хранится как целое число, оно становится равным 51.

Тогда,

51 / 256 * 100 - это то, как Flash возвращает его вам, а это 19.921875.

1 голос
/ 30 июля 2010

округление кажется

0 голосов
/ 18 мая 2011

«Плавающая проблема» также возникла в окне свойств компонента в Flash CS5. После новой установки CS5 кажется безумным со свойствами компонентов и выдает 20.00001 после того, как вы наберете 20.

Обновление программного обеспечения благодаря Adobe Application Manager решает эту проблему.

0 голосов
/ 01 августа 2010

Независимо от достоверности других ответов, существуют известные и хорошо документированные артефакты реализации с плавающей запятой, которые, среди прочего, использует Adobe Flash Player.Следующий код, например, выдаст немного неправильный (если в математике такое есть) вывод 1.0010000000000001:

trace(0.1009 + 0.9001);

Все это, как я уже сказал, является частью использования плавающего IEEEреализация спецификации точки.

0 голосов
/ 30 июля 2010

Если я правильно помню, flash хранит внутреннюю альфу с каким-то странным сумасшедшим значением, например, 0..240 (я не думаю, что это 255).Может ли быть так, что 20 принимает значение 20%, а после округления 19,92 является ближайшим значением после преобразования в процентное соотношение?

...