Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.04.2011, 19:06
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 1  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
По умолчанию Устройство числовых переменных

Слышал ли кто-нибудь как во Flash пакуются числовые переменные?

Я имею в виду их бинарную структуру. Где, например, у Number порядок, а где мантиса?
Тот же вопрос по поводу int. Где у него знак?

Старый 02.04.2011, 19:17
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
насколько помнится, все данные представлены в big endian.
А вообще, вы можете ответить на свой вопрос сами. Сделайте мини тест с байт-массивом. Запишите в него все что нужно, а потом считайте по байтам.

Старый 02.04.2011, 19:37
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Все это можно узнать в спецификации swf.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 02.04.2011, 20:10
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 4  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Спасибо за ответ. Проверил.

Там используется инверсная кодировка... Жаль.

Старый 02.04.2011, 20:21
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Почему?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 02.04.2011, 20:23
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 6  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Хотел сделать быстрый abs, логически умножив на число из единиц не считая знакового разряда...

Для int там ещё нужно инверсию делать и прибавлять единицу.
Для double - проделывать такую штуку только с мантиссой.

Для int получилось. Вот:

Код AS3:
import flash.utils.ByteArray;
 
// ==============================================
 
var inversArr:ByteArray = new ByteArray();
 
inversArr[0] = 255;
inversArr[1] = 255;
inversArr[2] = 255;
inversArr[3] = 255;
inversArr.position = 0;
 
var absArr:ByteArray = new ByteArray();
 
absArr[0] = 127;
absArr[1] = 255;
absArr[2] = 255;
absArr[3] = 255;
absArr.position = 0;
 
var invMul:int = inversArr.readInt();
var absMul:int = absArr.readInt();
 
// ==============================================
 
var varible:int;
 
varible ^= invMul;
varible &= absMul;
varible++;
 
// ==============================================

Работает раз в сто быстрее обычного abs. Для double буду думать.

Добавлено через 9 минут
Да, кстати, глупо, не подумал: absMul можно считать логическим сдвигом от invMul.

Добавлено через 17 минут
Сравнил с обычной проверкой. Работает в десять раз быстрее неё.

Добавлено через 18 минут
Даже странно... Не ожидал такого. Может, что-то делаю не так...

Добавлено через 48 минут
Понял. Написал глупость. Это работает только для отрицательных чисел.


Последний раз редактировалось semenyakinVS; 02.04.2011 в 20:33.
Старый 03.04.2011, 15:46
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 7  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
вот быстрый:
Код:
( a < 0 ? -a : a )
и только, если он в метод не обёрнут. а что касается быстрой метаматематики, то вот: http://code.google.com/p/apparat/sou...th/FastMath.as

Старый 03.04.2011, 19:31
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
http://code.google.com/p/e4xu/source...mf-reader.lisp
Что касается упаковки, вот, я тут начинал писать AMF парсер, где собственно есть уже UI29 и IEEE-754. Дома у меня есть еще и на AS3 (Number не полностью реализован, без NaN, -Infinity и Infinity, но это уже проще).
На счет быстродействия / оптимизации - я не берусь судить, я такой цели не ставил.

EDIT:
Что касается Number, то, собственно дело обстоит так (не смотря на то, что документации по IEEE стандарту куча, есть вещи которые не сразу очевидны).
1 бит - знак.
11 бит - экспонента biased на 1023 (это значит, что ее привели к положительному виду, чтобы получить ее реальное значение надо 1023 вычесть).
1 бит (который не записывается!) т.н. невидимый, или предполагаемый бит - первый бит мантиссы (мантиссу еще, даже более правильно называют сигнификандой).
оставшиеся 52 бита - мантисса.
Т.о. полная ширина мантиссы - 53 бита.
Чтобы высчитать результат нужно: знаковый бит помножить на мантиссу разделенню на единицу сдвинутую влево на 2 в степени 52 - мантисса позиций.
Т.е.
знак * (мантисса / (1 << 2^(52 - мантисса)))
Ну или по крайней мере мне так было удобнее всего посчитать
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 03.04.2011 в 19:48.
Старый 03.04.2011, 20:36
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 9  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
Спасибо за ссылку. Очень интересно!

По поводу сравнения... Меня это удивило, но несколько побитовых операций могут сработать быстрее сравнения

Добавлено через 6 минут
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Что касается Number, то, собственно дело обстоит так
Дело в том, что в случаи отрицательных чисел там ещё считается дополняемый код (знаю только по-украински как он называется). Т. е. берётся (побитовая инверсия мантиссы (или порядка)) + 1.

И в этом случаи так легко поменять знак не выйдет. Нужно проверять знак.


Последний раз редактировалось semenyakinVS; 03.04.2011 в 20:36. Причина: Добавил про сравнение
Старый 03.04.2011, 23:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Не, смотриете (хотя, может быть мы говорим об одном и том же, я тоже не знаю как по-русски будет bias в этом контексте). Что имеется в виду:
- экспонента записывается так, что все положительные значения будут всегда больше 1023 (заполненый первый бит). Таким образом они будут всегда больше отрицательных, если мы будем срванивать оба числа не вычисляя их значений.
- отрицательные числа записываются так, что певый бит у них не заполнен, т.е. они всегда меньше либо равны 1023. Следовательно, отняв 1023 от такого числа мы всегда получим отрицательное число (либо ноль).
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
знак , оптимизация , переменные
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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