Особенности языка mql5, тонкости и приёмы работы - страница 287

 
Alexey Viktorov #:

 ещё один


Если исходить из поставленной задачи " как быстрее" сделать равной...
То надо сокращать возможные условности и операции.
На мой взгляд switch, будет самым быстрым на уровне ассемблерных регистров.

А остаток от деления, дорогая операция.
Так писал Ренат. 

 
Alexey Viktorov #:

еще


x = (x + 1) & 1;
x = (int) MathCos(x);
В рамках чемпионата по шифрованию.
 
Roman #:

Если исходить из поставленной задачи " как быстрее" сделать равной...
То надо сокращать возможные условности и операции.
На мой взгляд switch, будет самым быстрым на уровне ассемблерных регистров.

А остаток от деления, дорогая операция.
Так писал Ренат. 

Обратите внимание, я ни слова не сказал о полезности вашего варианта, пользуйтесь чем хотите. Ведь я никому ничего не навязываю.

О скоростях выполнения можно было говорить на компах Pentium или раньше…

 
Alexey Viktorov #:

Обратите внимание, я ни слова не сказал о полезности вашего варианта, пользуйтесь чем хотите. Ведь я никому ничего не навязываю.

О скоростях выполнения можно было говорить на компах Pentium или раньше…

Вроде делимся своим взглядом, без претензий на уникальность.
И о навязывании, не может быть и речи.
Странная и не понятная ваша позиция, сразу в стойку ))

 
Roman #:

На мой взгляд switch, будет самым быстрым на уровне ассемблерных регистров.

Предполагаю, что XOR-вариант быстрее.

 
fxsaber #:

Предполагаю, что XOR-вариант быстрее.

Хм...
Действительно, получается одна операция, нет ветвлений.
switch избыточен.

int x=0;
Print(x ^= 1);
Print(x ^= 1);
 
Roman #:

Хм...
Действительно, получается одна операция, нет ветвлений.
switch избыточен.

но switch правильнее. За оптимизацию int toggle_value(int &x) { return x=x^1; } бьют. Потому-что оптимизируется мизер, а когда у 'x' появится 3-е допустимое значение (он-же int, это будет) в проекте появится сложноуловимый глюк

поэтому или switch, или x должен быть bool.

 
Микрооптимизации типа × ^= 1 полезны только в том случае, если они лежат на "горячем пути" вашей программы, где код будет выполняться много или очень часто.

Но если код, содержащий это выражение, составляет, скажем, 1 % от общего времени выполнения (т. е. является "холодным местом"), то даже 100-кратное ускорение этого выражения не принесет никакой пользы, поскольку общее время выполнения все равно составит 99,01 % (0,99 основного пути + 1/100) от исходного неоптимизированного кода.

Профилировщик полезен для обнаружения таких "бутылочных горлышек" в вашей программе.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 
for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))

Такой цикл пройдется по всем чартам, включая даже вложенные друг в друга варианты OBJ_CHART (для которых был вызван OBJPROP_CHART_ID)