Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   особенности хранения дробных чисел? (http://www.flasher.ru/forum/showthread.php?t=202760)

zxcv 07.08.2013 20:06

особенности хранения дробных чисел?
 
Меняю альфу объекта таймером: +0.01 за тик.
Трэйс выводит следующие значения альфы:
Код:

0.0078125
0.015625
0.0234375
0.03125
0.0390625
0.046875
0.0546875
...

Итого за 100 итераций значение альфы изменилось от 0 до 0.78125 вместо единицы.
В общем как мне выполнить задуманное? т.е. за сто итераций плавно поменять значение альфы от нуля до единицы.

Akopalipsis 07.08.2013 20:42

Мне тоже это интересно)

Добавлено через 37 секунд
Тот же намбер равняется сто...а альфа нет.

Добавлено через 5 минут
Если посмотреть на первое значение, то складывается чувство, что она от значения 250 отсчитывается и при делении или переводе по чуть-чуть режет.

maxkar 07.08.2013 21:36

Цитата:

Сообщение от zxcv (Сообщение 1142953)
В общем как мне выполнить задуманное? т.е. за сто итераций плавно поменять значение альфы от нуля до единицы.

Ничего необычного. Читайте.
А по вопросу... Считайте номер шага. Считайте альфу напрямую из номера шага (одно деление).

TWETTI 07.08.2013 21:40

Объяснение, почему так происходит, можете почитать здесь.

zxcv 07.08.2013 22:05

Спасибо за ссылки - наконец, до конца вник в это дело! А то я знал, что бывают округления, но подумал, что в данном случае оно слишком грубое.
Еще раз спасибо! И картинка хороша, да)

PainKiller 08.08.2013 16:28

Кстати, немного оффтоп, но тем не менее, кто нибудь натыкался на as3 библиотеки для арифметики с Numbers? На яваскрипте такие есть, на as3 не встречал.

-De- 08.08.2013 16:43

Там не совсем в ошибках округления дело. Альфа - на самом деле один байт всего. Т.е. всего 256 значений. Потому точность крайне низкая. Держите параллельно Number, увеличивайте его и альфу присваивайте этому Number.

FlashRus 08.08.2013 17:35

Раз уж такая пляска....

Код AS3:

 
var alphaCounter:int = 0
 
function timerHandler(e:TimerEvent):void {
        alphaCounter ++;
        мойDO.alpha = alphaCounter / 100;
}

И памяти меньше займёт и точность выше будет.


Часовой пояс GMT +4, время: 04:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.