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

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

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

Регистрация: Jul 2007
Сообщений: 44
По умолчанию Вычисления и приведение численных типов в AS3

Сразу прошу прозения, юзал поиск, может плохо искал, но ничего вразумтиельного не нашёл.

В своём проекте очень много имею дело с математикой. В большинстве выражений присутствуют int'ы и Number'ы. И мне стало не совсем понятно, в каком порядке и как именно работают преобразования численных типов в AS3.

Я сделал пару тестов:
Код:
var a:int = 2;
var b:int = 3;
var c:int = a/b;
trace(c);

// 0
Код:
var a:int = 2;
var b:int = 3;
var c:Number = a/b;
trace(c);

// 0.6666667
Код:
var a:int = 2;
var b:int = 3;
var c:int = Math.ceil(a/b);
trace(c);

// 1
Насколько я смог уловить, сначала всё вычисления производятся в Number'ах (то есть с плавающей точкой), а поттом полученное значение приводится к тому, которое требует контекст. Поправьте если не прав.

Помогите плиз инфой, ссылками, или чем нибудь. Я хотел иметь абсолютно точную и полную схему этого процесса. Чтобы не осталось вопросов.
__________________
hell no !

Старый 05.08.2008, 19:16
Xpb7 вне форума Посмотреть профиль Отправить личное сообщение для Xpb7 Найти все сообщения от Xpb7
  № 2  
Ответить с цитированием
Xpb7

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Тут не надо заморачиваться. Просто нужно логически размышлять.

В 1м случае по скольку c целое число - берется его целая часть - это 0.
Во 2м все понятно, как и должно быть.
В 3м берётся потолок из 0.6 - это 1 (кстати типа Number), который отлично (в данном случае автоматически) преобразуется в int и выводится тебе.

Что тут может быть неясно?
Я бы на твоем месте больше волновался про приведение к другого рода типам.
Например помнить, что:

Код:
var c:int = Math.ceil(a/b);
trace(c); //тут происходит trace(c.toString()); автоматически

Старый 05.08.2008, 19:34
romantique вне форума Посмотреть профиль Отправить личное сообщение для romantique Найти все сообщения от romantique
  № 3  
Ответить с цитированием
romantique

Регистрация: Jul 2007
Сообщений: 44
Неясно например вот что. если у меня длиннющая формула, где есть куча слагаемый и множителей с типами как int так и Number. Всё это в итоге приравнивается скажем к инту. как будут происходить приведения? На каждой стадии вычисления длинного выражения, или всё вычислится так, будто там стоят Number, а только потом отбросится дробная часть?
Хотелось бы знать абсолюнто точную схему, точно такую же, как существует скажем для C++, где есть целый надор документировынных правил.

Каждый конкретный пример я могу протестить, или как то интуитивно догадаться. Но всё же хотелось бы иметь точную картину, а не нечто созданное на основе тестов.

update:
спасибо, уже разобрался. Любое численное выражение вычисляется как Number, независмо от того, какой тип (целый, или двещественный) входящих в выражение элементов имеется. То есть для себя можно считать, что все составные части выражения идут как Number. Конечный результат приводится к тому типу, который требует контекст. Будь то lefthanded переменная, или подстановка в функцию в качестве аргумента.
__________________
hell no !


Последний раз редактировалось romantique; 05.08.2008 в 19:45.
Старый 05.08.2008, 19:45
Xpb7 вне форума Посмотреть профиль Отправить личное сообщение для Xpb7 Найти все сообщения от Xpb7
  № 4  
Ответить с цитированием
Xpb7

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Всё предельно просто.
Код:
a = b;
Где b - это твоя огромная формула. Ты можешь в ней оперировать с чем хочешь, насувать туда что угодно. Просто потом, результат будет переведен в тот тип, которй представляет переменная a.

Старый 05.08.2008, 19:48
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 5  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
В большой строке все int будут заменены на Number, когда появляется необходимость. Обратно же только после присвоения переменной с типом int или после функции преобразования int()


Последний раз редактировалось Rzer; 05.08.2008 в 19:51.
Старый 05.08.2008, 22:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Опреации с целыми числами - они и есть операции с целыми числами, т.е. вас не удивляет, что
Код:
var a:Number = 3;
var b:Number = a >> 2;
trace(b);// 0
Так же точно происходят и операции с целыми числами, а класс Math по определению в методе .ceil() требует тип Number, так что он и не производит никаких операций с целыми числами, он их сразу на входе конвертирует в числа с плавающей точкой.
__________________
Hell is the possibility of sanity

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

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

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


 


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


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