Мой компьютер стал глупым. 0 + 20 = 19.921875!!! Помогите мне!

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

У меня нет малейшей идеи, почему это происходит:

_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!:(

Я собираюсь кричать. Мой процессор имеет рак? Alzheimer? Кто сказал, что компьютеры не делают ошибки?

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

8
задан navand 30 July 2010 в 16:35
поделиться

4 ответа

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

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

aClip._alpha = 20;

20% из 256 составляет 51,2 , поскольку оно хранится как целое число, оно будет сброшено на 51 .

Тогда

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

23
ответ дан 5 December 2019 в 07:10
поделиться

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

1
ответ дан 5 December 2019 в 07:10
поделиться

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

0
ответ дан 5 December 2019 в 07:10
поделиться

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

trace(0.1009 + 0.9001);

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

-1
ответ дан 5 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: