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

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

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

Регистрация: Feb 2014
Сообщений: 33
По умолчанию Почему INT медленнее NUMBER ?

Здравствуйте , сделал такой тест
Код AS3:
package  {
 
import flash.display.MovieClip;
import flash.utils.getTimer;
import flash.text.TextField;
import flash.events.MouseEvent;
 
	public class doc extends MovieClip {
		var tf:TextField;
 
		public function doc() {
stage.color = 0x333333 ;tf = new TextField;tf.textColor = 0xFFFFFF;tf.width = 1000;tf.wordWrap = true;
            stage.addEventListener(MouseEvent.MOUSE_DOWN,m_down);
		}
function m_down(event:MouseEvent):void{
	test();
}
function test():void{
tf.text = "";
addChild(tf);
var i:uint = 0;
var l:uint = 99999999;
var t:uint;
var n1:Number = 567567;
var n2:Number = 434574;
var n3:Number;
t  = getTimer();
 while( i < l ){
	//n3 = n1/(((n1/n2*n2+n2-n2)/n1)*n1);
	 n3 = n1/n2*n2+n2-n2;
	 i++;
 }
 
t = (getTimer()-t);  tf.text = "NUMBER..."+t;
i = 0;
var u1:uint = 567567;
var u2:uint = 434574;
var u3:uint;
t  = getTimer();
 while( i < l ){
	//u3 =  u1/(((u1/u2*u2+u2-u2)/u1)*u1);
	u3 = u1/u2*u2+u2-u2;
	 i++;
 }
t = (getTimer()-t);
tf.appendText( "\n"+"UINT.........."+t);
 
i = 0;
var i1:int = 567567;
var i2:int = 434574;
var i3:int;
t  = getTimer();
 while( i < l ){
	// i3 = i1/(((i1/i2*i2+i2-i2)/i1)*i1);
	 i3 = i1/i2*i2+i2-i2;
	 i++;
 }
t = (getTimer()-t);
tf.appendText( "\n"+"INT............."+t );
 
 
 
}
	}
 
}
Результаты :
NUMBER...271
UINT........689
INT..........469
Но если в циклах раскоментировать верхнюю строку и закоментировать нижнюю :
NUMBER...257
UINT........2222
INT..........2173

Почему такие результаты ? разве int не быстрее Number ?

Старый 24.03.2016, 14:18
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 2  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
Во первых элементарные типы они не бестрее и не медленее, дело скорее в объеме занимаемой памяти. Вот цитата из документации "В типе данных Number для представления целых значений может отводиться до 53 бит в отличие от типов данных int и uint, для которых отводится 32 бита". Так же операция деления всегда возвращает тип Number, поэтому в результате i3, u3 каждый раз должно происходить преобразование типов с отсечением мантисы числа. Ну и возвращаясь у результатам у меня разницы в результатах такая что я бы ей пренебрег, уж никак не на порядок как у вас:
1 закоменчено n3:Number u3:uint i3:int:
NUMBER...705
UINT........758
INT..........728
2 закоменчено n3:Number u3:uint i3:int:
NUMBER...2538
UINT........2529
INT..........2528
1 закоменчено n3:Number u3:Number i3:Number :
NUMBER...741
UINT........722
INT..........712
2 закоменчено n3:Number u3:Number i3:Number :
NUMBER...2540
UINT........2509
INT..........2517
__________________
ответ прост: be || !be == true

Старый 24.03.2016, 14:29
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 3  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Так же операция деления всегда возвращает тип Number
Вот интересно, на уровне ассемблера целочисленное умножение и деление (mul/div) и вещественное (fmul/fdiv) - это два разных набора команд с совершенно разным временем исполнения.Неужели в конечном счете всегда используется вещественный вариант?

Старый 24.03.2016, 15:00
Swer вне форума Посмотреть профиль Отправить личное сообщение для Swer Найти все сообщения от Swer
  № 4  
Ответить с цитированием
Swer
 
Аватар для Swer

Регистрация: Feb 2014
Сообщений: 33
Цитата:
Сообщение от amesqit Посмотреть сообщение
Во первых элементарные типы они не бестрее и не медленее, дело скорее в объеме занимаемой памяти.
Есть такое
Цитата:
Сообщение от Adobe
Среда выполнения Flash обрабатывает типы данных int и uint эффективней, чем Number
Возможно разные показатели могут быть из-за разных процессоров
Цитата:
Сообщение от Adobe
Тип данных int полезен для счетчиков циклов и других ситуаций, когда не требуется число с плавающей запятой. Он аналогичен типу данных int в языках Java и C++.
В C++ вроде как не происходит никакого преобразования из к примеру из float в int там просто незаписываются не нужные байты

Старый 24.03.2016, 16:37
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
действительно приводится к флоту:
Код AS3:
var n:int=10;
var m:int=3;
trace(n/m);//3.3333333333333335

Старый 26.03.2016, 00:03
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код:
Почему такие результаты ? разве int не быстрее Number ?
Нужно получившийся байткод смотреть.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 29.03.2016, 11:48
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от dimarik Посмотреть сообщение
Нужно получившийся байткод смотреть.
В данном случае мешает деление, для которого нет целочисленного аналога в байткоде. Но даже если убрать деление и подобрать формулу, которая не будет давать переполнение для int, компилятор не использует целочисленное умножение и сложение. Если принудительно поменять multiply на multiply_i, а add на add_i, то результат будет немного (пренебрежимо) лучше чем при операциях с Number.
В общем, лучше не заморачиваться.
__________________
משיח לא בא
משיח גם לא מטלפן


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

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

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


 


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


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