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

Вернуться   Форум Flasher.ru > Блоги > Идеи и творения

Буду делиться тем что делаю.
Оценить эту запись

Двойное деление vs Мозги

Запись от Герыч размещена 09.08.2009 в 00:04

Ещё одна оптимизулька от меня=)
Часто нужно сделать деление двух чисел на одно и то же число(например при нормировании вектора), т.е.
Код:
r1=n1/del;
r2=n2/del;
Смысл оптимизульки - посчитать множитель 1/del заранее, а потом умножать числа на этот множитель:
Код:
tmp=1/del;
r1=n1*tmp;
r2=n2*tmp;
Вот сравнение:
Код AS3:
var t1:int;
var t2:int;
var count:int=1000000;
var i:int;
var del:Number=1079323;
var n1:Number=2107;
var n2:Number=2107;
var r1:Number=2107;
var r2:Number=2107;
var tmp:Number;
 
t1=getTimer();
for(i=0;i<count;i++)
{
	r1=n1/del;
	r2=n2/del;
}
t1=getTimer()-t1;
t2=getTimer();
for(i=0;i<count;i++)
{
	tmp=1/del;
	r1=n1*tmp;
	r2=n2*tmp;
}
t2=getTimer()-t2;
trace(t1,t2);
На экране вывелось:
Код:
47 25
Вывод:
2 деления хуже, чем 1 деление и 2 умножения!)
Даже написав эту строку стало интересно, а насколько деление хуже умножения?
Проверим:
Код:
var t1:int;
var t2:int;
var count:int=10000000;
var i:int;
var del:Number=3463;
var n:Number=4745;
var r:Number=3634;

t1=getTimer();
for(i=0;i<count;i++)
{
	r=n/del;
}
t1=getTimer()-t1;
t2=getTimer();
for(i=0;i<count;i++)
{
	r=n*del;
}
t2=getTimer()-t2;
trace(t1,t2);
Вывело:
Код:
220 137
Почти в 2 раза! Во как)
Всего комментариев 2

Комментарии

Старый 08.03.2010 21:33 chabapok вне форума
chabapok
у меня -- все логично.
Первый пример вывел
19 32
второй пример вывел
120 176

флеш cs4.
Старый 07.02.2011 00:37 expl вне форума
expl
Да, тоже такую штуку делаю, как деление вижу
Казалось бы - интерпретация байт-кода с прочими накладными расходами на поддержание работы виртуальной машины должно свести на нет такие оптимизации, - а они могут дать прирост ашник в 2 раза!
 

 


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


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