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

 
Andrei Iakovlev #:

У какой-то переменной значение равно -1.

Какая проверка будет выполнена быстрее на проверку этого значения: < 0 или == -1?

Могу предположить, что <0, ибо это одна машинная команда, а ==-1 - сравнение с константой, которую надо загрузить. Но зависит от компилятора.

Также, это будет хоть как-то проявляться только в достаточно большом цикле.

 
JRandomTrader #:

Могу предположить, что <0, ибо это одна машинная команда, а ==-1 - сравнение с константой, которую надо загрузить. Но зависит от компилятора.

Также, это будет хоть как-то проявляться только в достаточно большом цикле.

https://godbolt.org/

А вот сколько тактов, какая инструкция занимает - сами копайте, кому интересно)))

ИМХО, в практической плоскости - абсолютно не важно.

Compiler Explorer
Compiler Explorer
  • About the author
  • godbolt.org
Compiler Explorer is an interactive online compiler which shows the assembly output of compiled C++, Rust, Go (and many more) code.
 
Vladimir Simakov #:

А вот сколько тактов, какая инструкция занимает - сами копайте, кому интересно)))

ИМХО, в практической плоскости - абсолютно не важно.

Избавлялся от другого.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Virtual

fxsaber, 2025.01.08 16:06

использование меняет внутреннюю скрытую архитектуру библиотеки, обходя соответствующие замедляющие особенности MQL5/RAM. Имеет смысл использовать, если требуется скорость расчетов - Тестер.

бесплатно повышает производительности на десятки процентов, как минимум.

Кратко, что дало такой прирост на практической задаче.

  • Отказ от работы с указателями - не тратится время на проверку их валидности.
  • Отказ от копирования простых структур (A = B). Например, доступ к элементу массива структур производить только через индекс, а не копированием элемента в отдельную структуру (переменную).
Пришлось заморочиться, но результат шикарный.
 

Передаю в функцию массив Close[].

double Close[];
function(Close);
void function(double &array[]){}

Внутри этой функции через код возможно узнать имя этого массива, а не писать самому "Close[]" в принте?

 
Andrei Iakovlev #:

Думаю, что нет. Функция просто принимает массив как аргумент. Можно создать структуры, с двумя полями. В одном сам массив, в другом его имя, и уже эту структуру передавать в функцию. Но это тоже самое, что передать название массива отдельным аргументом.

 
Andrei Iakovlev #:

Некоторая переменная имеет значение -1.

Какая проверка будет выполнена быстрее для проверки этого значения: < 0 или == -1?

Технически говоря, равная оценка всегда обрабатывает все данные (32 или 64 бита), а неравная, меньшая или большая, остановится в тот момент, когда эта оценка будет детерминирована. Но выигрыш настолько мал, что современные процессоры не вернут вам это ускорение из-за того, как реализована конвейеризация. Не знаю, как бы все сложилось, если бы можно было насытить конвейер только одним типом сравнения. Возможно, вы смогли бы измерить реальное преимущество над другим оператором.

Практически, вы можете игнорировать его для целых чисел. Для двоек все немного иначе, поскольку обычно вы не будете сравнивать их на равенство.

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

Стоимость деления составляет около 25-30 циклов, а умножения - около 10 циклов. (Что-то в этом роде, зависит от архитектуры) по соотношению затрат это примерно 1:3.
 
Andrei Iakovlev #:

У какой-то переменной значение равно -1.

Какая проверка будет выполнена быстрее на проверку этого значения: < 0 или == -1?

Вариант a==b лучше заменить на (a-b)==0 , так лучше.

 
Путник #:

Лучше заменить a==b на (ab)==0, это лучше.

Лучше заменить a==b на (a-b)==0, это лучше.

 

Лучше заменить a==b на (a минус b)==0, это лучше.

В третий раз пишут.

Вопрос к администрации: почему-то минус между a и b не проходит, улетучивается/пропадает.

 
Похоже авто переводчик глючит