Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Buchik,
Цитата Buchik:
for( j=0 ; j<n ; j++ )
{
if ( (i+1)%2 == 0 )
wcout << mas[i][j] << "\t" ;
}
wcout << L"\n" ; »
Наглядный тебе пример. Раз уж здесь разбор полетов начался.
У тебя стоит условие, т.е. уже потеря в две/три команды ассемблера, без учета суммирования в скобках (а это еще несколько команд, при "лобовой" реализации), и без учета деления. А деление "в лоб" без оптимизацией - еще ряд "бестолковых" тактов ЦП.
Меж тем, отвечая на вопрос:
Цитата lxa85:
Как вообще записывается четное число? »
Формула четного числа : 2N. Умножение само по себе - относительно дорогая операция. Однако здесь идет умножение на два, что в двоичной системе может быть приравнено к сдвигу влево на 1 разряд. Сдвиг - это "логика", логические операции выполняются быстрее всего.
Вот и получается, что вместо множеств проверок и лишней работы ЦП, можно сразу определить делением (по сути двоичным сдвигом вправо на 1 разряд) кол-во четных строк, и получать следующую четную строку сдвигом вправо переменной счетчика.
Другое оптимизационное решение - делать двойной инкремент переменной счетчика (оптимизированное i:=i+2 == inc i, 2), т.к. операция инкремент - это одна достаточно "легкая" инструкция ЦП.
Возможность использования практически прямых указаний для ЦП зависит от реализации компилятора/интерпретатора языка.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:48, 14-06-2011 | #10