Ошибки, баги, вопросы - страница 3361
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Перебор всех сделок.
Кстати классный вариант для перебора значений всего ненулевого массива. Возможно - лучший по производительности(не уверен)
Спасибо, взял на заметку.
Возможно - лучший по производительности(не уверен)
Помнится производительность рекурсии, как цикла, была очень удивительна.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Индикаторы: MaFromMa
Ilyas, 2019.04.04 14:59
Да, тут есть над чем поработать
Представленная рекурсия вырождается в цикл, который очень похож на сравниваемый, только оптимизируется он лучше.
Буду разбираться в возникшей разнице.
Для скорости (более лучших оптимизаций компилятором) работы программы в циклах, старайтесь избегать использования (адресации к) глобальных переменных и членов объектов.
Попробуйте в приведённом примере использовать локальную sum1 вместо глобальной
Это нормальное поведение с целочисленными типами и называется оно переполнение. У uchar 255+1 = 0; 0-1 = 255.
Помнится производительность рекурсии, как цикла, была очень удивительна.
С рекурсией, действительно, тогда было удивительное. Что касается массивов через unsigned-индексы, то там будет странно увидеть разность в скорости.
С рекурсией, действительно, тогда было удивительное. Что касается массивов через unsigned-индексы, то там будет странно увидеть разность в скорости.
Надо проверить ради интереса. Хотя, согласен - маловероятно
проверил. Результаты неожиданные для меня. Вариант с bool() работает на ~75%(!!!) медленнее. Видимо преобразование типов (даже bool) весьма затратная штука. Помнится, об этом несколько раз говорил Ренат.
рекурсия с циклом while сейчас почти одинаковые и самые быстрые. Значит Ильяс починил.
цикл for на ~35% медленнее, чем while, и почти одинаков по производительности do while
Вывод: для максимальной производительности используйте цикл while!
Кстати классный вариант для перебора значений всего ненулевого массива. Возможно - лучший по производительности(не уверен)
Спасибо, взял на заметку.
Да, мне тоже очень понравился такой вариант.
Раньше я пользовался таким
Спасибо fxsaber, я тоже беру в пользование ваш вариант.
проверил. Результаты неожиданные для меня. Вариант с bool() работает на ~75%(!!!) медленнее. Видимо преобразование типов (даже bool) весьма затратная штука. Помнится, об этом несколько раз говорил Ренат.
рекурсия с циклом while сейчас почти одинаковые и самые быстрые. Значит Ильяс починил.
цикл for на ~35% медленнее, чем while, и почти одинаков по производительности do while
Вывод: для максимальной производительности используйте цикл while!
А если не объявлять в каждом цикле for новую int i, а использовать ту, что есть?
Да, мне тоже очень понравился такой вариант.
Раньше я пользовался таким
Спасибо fxsaber, я тоже беру в пользование ваш вариант.
Выяснили же уже, что по быстродействию он проигрывает циклу for в классическом варианте.
А я сначала пишу, а потом читаю.
Точней, я сначала ответил прочитав только то сообщение которое процитировал, а потом дочитал страницу до конца.
В принципе да, скорость важна. Но для наших задач, на мой взгляд не критично. Хотя я уже всё чаще использую циклы while, особенно в индикаторах.