Альтернативные реализации стандартных функций/подходов - страница 6

 
fxsaber:

Даже аналоги сильно расходятся между собой по производительности. Количество же людей, могущих их написать или найти - меньше процента от юзеров.

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

Я конечно не спорю с тем, что надо стремиться к совершенству, но желательно делать это в порядке приоритетов.

 
Alexey Navoykov:

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

Даже 1% выигрыша при Оптимизации дает ощутимые результаты.

Я конечно не спорю с тем, что надо стремиться к совершенству, но желательно делать это в порядке приоритетов.

Для MQ Вы менее интересны, чем целая армия MT4-умельцев, не перешедших по разным причинам на пятерку.

 
Библиотеки: Fast iBarShift and Bars for MT5
Библиотеки: Fast iBarShift and Bars for MT5
  • 2018.05.04
  • www.mql5.com
Fast iBarShift and Bars for MT5: Автор: Nikolai Semko...
Файлы:
iBars.mqh  14 kb
 

Более быстрые аналоги стандартных функций ceil(), floor(),round()

Выигрыш в скорости в 2-2.5 раза

long Ceil (double x) { return (x-(long)x>0)?(long)x+1:(long)x; }
long Round(double x) { return (x>0)?(long)(x+0.5):(long)(x-0.5);}
long Floor(double x) { return (x>0)?(long)x:((long)x-x>0)?(long)x-1:(long)x; }

результаты теста правильности и скорости:

2018.08.25 17:23:23.199 TestRound (EURUSD,M10)  Время выполнения ceil =  3.745 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.200 TestRound (EURUSD,M10)  Время выполнения Ceil =  1.806 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.205 TestRound (EURUSD,M10)  Время выполнения floor = 4.243 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.206 TestRound (EURUSD,M10)  Время выполнения Floor = 1.621 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.209 TestRound (EURUSD,M10)  Время выполнения round = 2.984 наносекунд, Контрольная сумма = 5249992896
2018.08.25 17:23:23.211 TestRound (EURUSD,M10)  Время выполнения Round = 1.519 наносекунд, Контрольная сумма = 5249992896
Стандартные функции возвращают тип double. Но я не стал повторять т.к. не понимаю зачем округленным функциям тип double.
Файлы:
TestRound.mq5  5 kb
 
Nikolai Semko:

результаты теста правильности и скорости:

Только не нано, а мили.

 
fxsaber:

Только не нано, а мили.

Нет нано. 1000000 проходов, а делю на 1000.
Только они еще быстрее, т.к. считается вместе со всем содержимым прохода цикла. Через 3 часа доберусь до компа и исправлю подсчет времени выполнения чисто этих функций.
 
Nikolai Semko:
Нет нано. 1000000 проходов, а делю на 1000.
Неоднозначная трактовка тогда. Решил, что выводится время цикла, а не среднее время одного вызова функции.
 
fxsaber:
Неоднозначная трактовка тогда. Решил, что выводится время цикла, а не среднее время одного вызова функции.
Да, в это время еще входит время на выполнение трех сложений и 1 проверки.
Исправлю, т.к. знаю как. Так что выигрыш будет еще больше.
 
Nikolai Semko:
Стандартные функции возвращают тип double. Но я не стал повторять т.к. не понимаю зачем округленным функциям тип double.

Потому, что конвертировать double в целое (таким образом) - говнокод. round с друзьями не предназначена для получения целого типа из плавающего.

Причина обращения: