Implementaciones alternativas de funciones/enfoques estándar - página 6

 
fxsaber:

Incluso los análogos son muy divergentes en términos de rendimiento. El número de personas que pueden escribirlas o encontrarlas es inferior al porcentaje de usuarios.

Bueno, eso es porque el resto de la gente está bastante contenta con el rendimiento disponible ) De hecho, hablando con franqueza, la mayoría de estos aumentos de velocidad son apreciables sólo en mediciones de prueba aisladas.

Por supuesto, no discuto que debamos buscar la perfección, pero es mejor hacerlo por orden de prioridades.

 
Alexey Navoykov:

Porque otras personas están bastante contentas con el rendimiento disponible ) Después de todo, la mayoría de estos aumentos de velocidad sólo son perceptibles en mediciones de prueba aisladas.

Incluso un aumento del 1% en la optimización produce resultados tangibles.

Desde luego, no discuto que se busque la perfección, pero es aconsejable hacerlo por orden de prioridad.

Para MQ eres menos interesante que todo el ejército de listillos de MT4 que por diversas razones no se han pasado al 5.

 
Библиотеки: 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...
Archivos adjuntos:
iBars.mqh  14 kb
 

Análogos más rápidos de las funciones estándar ceil(), floor(),round()

Velocidad 2-2,5 veces superior

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; }

Resultados de las pruebas de corrección y velocidad:

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
Las funciones estándar devuelven el tipo double. Pero no lo repetí porque no entiendo por qué las funciones redondas necesitan el tipo double.
Archivos adjuntos:
TestRound.mq5  5 kb
 
Nikolai Semko:

los resultados de la prueba de corrección y velocidad:

Sólo que no nano, sino millas.

 
fxsaber:

Sólo que no son nano, son millas.

No hay nano. 1000000 pases, y lo divido por 1000.
Sólo que son aún más rápidos, ya que se cuentan junto con todo el contenido del pase de bucle. Dentro de 3 horas llegaré a mi ordenador y arreglaré el cálculo del tiempo de ejecución de estas funciones.
 
Nikolai Semko:
No hay nano. 1000000 pases, y lo divido por 1000.
Una interpretación ambigua entonces. Se ha decidido dar salida al tiempo de ciclo, no al tiempo medio por llamada de función.
 
fxsaber:
Interpretación ambigua entonces. Se ha decidido dar salida al tiempo de ciclo, no al tiempo medio de una llamada de función.
Sí, este tiempo todavía incluye el tiempo para hacer tres adiciones y una comprobación.
Lo arreglaré, porque sé cómo hacerlo. Así que la ganancia será aún mayor.
 
Nikolai Semko:
Las funciones estándar devuelven el tipo double. Pero no lo repetí porque no entiendo por qué las funciones redondas necesitan el tipo double.

Porque convertir doble a entero (de esta manera) es una mierda de código. La ronda con los amigos no está diseñada para obtener el tipo entero del tipo flotante.