¿Cómo puedo pasar por una enumeración de forma coherente? - página 4

 
fxsaber:
Casi cuatro veces más rápido que el estándar NormalizeDouble (build 1395)... es una muleta de los desarrolladores.

¿Qué es casi cuatro veces más rápido? ¡Muéstrame el código!
 
A mí también me sorprende lo de las 4 veces...
Y no está muy claro cómo caen ahí las matrices o el interruptor, es pura matemática.
 
Dmitry Fedoseev:
¿Qué es casi cuatro veces más rápido? ¡Dame el código!
No se sabe cuántos días en el código base para la inspección. El revisor debe estar de vacaciones.
 
fxsaber:
En la kodobaza para una inspección durante un número desconocido de días. El inspector probablemente esté de vacaciones.
Creo que han empezado a publicarlo hoy. Quizá también vengan a nosotros ))))
 
Ihor Herasko:
Creo que han empezado a publicarlo hoy. Tal vez también lleguen a nosotros ))))
Lo tienes. No lo sé.
 
Dmitry Fedoseev:
¿Qué es casi 4 veces más rápido? ¡Código, por favor!

https://www.mql5.com/ru/code/16169

// Почти в четыре раза быстрее соответствующей стандартной функции (build 1395)
#define NormalizeDouble PRICE_COMPARE::MyNormalizeDouble
Price_Compare
Price_Compare
  • votos: 1
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Изящное и шустрое сравнение double-значений "цены".
 

Tenga cuidado al utilizar esta función, ya que funcionará correctamente en un rango de valores más pequeño que NormalizeDouble.

No voy a explicar por qué. Adivínalo tú mismo.

La función NormalizeDouble funciona :

  1. Se selecciona la parte entera - I
  2. Se selecciona la parte fraccionaria - F
  3. F = F * 10^dígitos
  4. F = F (+ o - según el signo) 0,5
  5. F = (parte entera de F) / 10^dígitos
  6. resultado = I + F
 
En definitiva, no hubo ninguna sensación.
 
Ilyas:

Tenga cuidado al utilizar esta función, ya que funcionará correctamente en un rango de valores más pequeño que NormalizeDouble.

No voy a explicar por qué. Adivínalo tú mismo.

La función NormalizeDouble funciona :

  1. Se detecta la parte entera - I
  2. Se selecciona la parte fraccionaria - F
  3. F = F * 10^dígitos
  4. F = F (+ o -, según el signo) 0,5
  5. F = (parte entera de F) / 10^dígitos
  6. resultado = I + F

La descripción de la función contiene la siguiente nota

Losvalores calculados de StopLoss y TakeProfit, así como los valores de los precios abiertos para las órdenes pendientes deben ser normalizados con la precisión que puede obtenerse medianteDigits().

Esto sólo es cierto para los símbolos que tienen un paso de precio mínimo de 10^N, donde N es un número entero y no positivo. Si el paso de precio mínimo tiene un valor diferente, entonces la normalización de los niveles de precio antes de OrderSend es una operación sin sentido, que en la mayoría de los casos resultará en el retorno de OrderSend falso.


Es una buena idea corregir las representaciones obsoletas en la ayuda.

NormalizeDouble está completamente desacreditado. No sólo es una implementación retardada, sino que tampoco tiene sentido en múltiples símbolos de intercambio (por ejemplo, RTS, MIX, etc.).

En cuanto a la aplicación alternativa presentada, es tan precisa como la original tanto para los positivos como para los negativos. Y hace el redondeo de la misma manera. Sólo que funciona 4 veces más rápido.

 
fxsaber:

Esto sólo es cierto para los personajes que tienen un paso de precio mínimo de 10^N, donde N es un número entero y no positivo. Si el paso de precio mínimo tiene un valor diferente, entonces la normalización de los niveles de precio antes del OrderSend es una operación sin sentido, que en la mayoría de los casos hará que se devuelva un OrderSend falso.

¿Por qué debería hacerlo?
Razón de la queja: