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

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

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

Регистрация: Nov 2010
Сообщений: 430
Question Стиль написания: * или /

Здравствуйте.

Недавно копался в чужих исходниках и заметил, такую штуку:
Иногда пишут
Код AS3:
Math.PI/2
а иногда
Код AS3:
0.5*Math.PI
Есть ли какая-нибудь разница в выполнении: Что-то быстрее или памяти меньше выделяется, или это просто стиль такой?
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

Старый 13.04.2012, 13:44
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 2  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
может привычка из C/C++, там для целых чисел a/2 и 0.5*a дают разные результаты.
__________________
:)

Старый 13.04.2012, 13:56
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 3  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Говорят * быстрее.
__________________
In Code We Trust

Старый 13.04.2012, 14:07
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 4  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Народ, когад вы научитесь такие вещи проверять. Тест занял 5 минут.
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.getTimer;
 
	/**
	 * ...
	 * @author Aquahawk
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			var i:int;
			var start:Number;
			var tf:TextField = new TextField();
			tf.autoSize = TextFieldAutoSize.LEFT;
			addChild(tf);
 
			start = getTimer();
			for (i = 0; i < 10000000; i++ ) {
				Math.PI / 2;
			}
			tf.appendText(getTimer() - start + "\n");
 
			start = getTimer();
			for (i = 0; i < 10000000; i++ ) {
				0.5*Math.PI;
			}
			tf.appendText(getTimer() - start + "\n");
 
			start = getTimer();
			for (i = 0; i < 10000000; i++ ) {
				Math.PI / 2;
			}
			tf.appendText(getTimer() - start + "\n");
 
			start = getTimer();
			for (i = 0; i < 10000000; i++ ) {
				0.5*Math.PI;
			}
			tf.appendText(getTimer() - start + "\n");
		}
	}
}
Код:
62
64
64
77
Добавлено через 1 минуту
это в релизе. Разницы никакой. На миллионе итераций. Писать надо так что было понятно, а скорость выигрывать алгоритмически. Можно ещё целые числа на 2 делить и умножать сдвигом влево-вправо, только зачем?
__________________
:)

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Какой-то странный тест. Тесты нужно начинать по клику, ибо в первые 10 секунд FP "разогревается" и работает весьма странно
__________________
...вселенская грусть

Старый 13.04.2012, 14:40
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Есть такое, не сказал бы что 10 секунд, но именно поэтому испытания проведены дважды и чередуются. Кто хочет может добавить старт по клику, на это уйдёт ещё одна минута
__________________
:)

Старый 13.04.2012, 14:41
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Тут даже чисто интуитивно. Смотрите :
1.4 * 1.5 = 2.1 посчитали быстро? ) круто
2.1 / 1.5 = 1.4 ... а тут уже в уме считать в разы сложнее...
__________________
Марк Tween

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Это тема не из С++, это объективное наблюдение - процессор не умеет выполнять арифметические действия, только сдвиги и маски (ну, это своего рода преувеличение, т.как можно сказать, что умеет, но в конечном счете все арифметические операции реализованы сдвигами и побитовым сложением / масками).
Реализация деления объективно более громоздкая, чем умножения. А сложение - еще проще, чем умножение. Т.е. сложить 2 одинаковых числа - быстрее, чем умножить на 2. Но существует очень и очень много оговорорк. Т.как мы не пишем в AS код который непосредственно выполняется процессором, мы можем не знать каких-то деталей. А деталей, на самом деле, куча.
- во Флеше нет арифметических опреаций для целых чисел, только для чисел с плавающей запятой с последующим приведением типов. Реализация арифметики для таких чисел отличается от целочисленных операций.
- Флешевый байткод компилируется в машинный код специальным компилятором, который может делать оптимизации для конкретной архитектуры на которой код выполняется. Так что тест приведенный выше может дать и совсем другие результаты на другом типе процессора, другой битности системы и т.д.
- более того, некоторые процессоры, на уровне процессора (даже не машинного кода!) могут делать специальные оптимизации для часто встречающихся операций. Например, умножение на константу может быть быстрее умножения на переменную. Кроме того, умножение и деление могут быть реализованы с переменной скоростью. Даже сложение можно реализовать за разное количество тактов (вариант когда можно сложить за меньшее количество тактов изначально проанализировав числа и применив обычное побитовое или вместо длинной рутины) и т.п.
- еще, у чисел с плавающей запятой есть свои более и менее "удачные" области. например числа с очень маленькой дробной частью ведут себя гораздо хуже при арифметичсеких операциях, чем числа того же порядка но "целые".
- еще к этому можно добавить, что система выполняющая тест почти наверняка параллельно выполняет что-то еще, и в зависимости от "чего-то еще" нагрузка на соответствующие участки процессора может быть другой.

Подытожив: мы на столько не в состоянии судить о разнице между аналогичными операциями, что лучше не задумываться о том, что быстрее - информация полученая на тестах скорее всего случайна.

Главоне - между оператором и именами переменных должны быть пробелы. Вот это по-настоящему доводит до белого каления человка, которому это потом читать. Остальное не имеет значения.
__________________
Hell is the possibility of sanity

Старый 13.04.2012, 20:09
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 9  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
wvxvw, абсолютно прав. Это не та "оптимизация" над которой стоит задумываться.

Старый 13.04.2012, 21:26
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Зато оптимизация чтения кода имеет смысл. Я лично пишу "/ 2".
__________________
Reality.getBounds(this);

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

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

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


 


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


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