Para los estetas, se puede crear una estructura DOBLE con los operadores adecuados. Pero esto tiene poco que ver con la práctica. En el ejemplo práctico original.
De hecho, el error es comprensible. Pero al escribir un código como éste, no siempre es obvio que esa comprobación no es suficiente para evitar la división por cero.
Sólo hay que poner a cero el elemento del array que se está creando. La ausencia de inicialización es lo que provoca las colisiones en este caso. Por eso simplemente hice la puesta a cero en mi código. No quiero molestar con la visión general.
De este modo, todas las condiciones de desbordamiento y subdesbordamiento pueden protegerse de forma segura. Sin embargo, lo anterior no funcionará cuando v o u sea cero. En estos casos, la solución es recurrir a un algoritmo diferente, por ejemplo(1).
Unless specified otherwise, when a value of floating-point type is compared inside a assertion, operators , , etc. defined for this type are used. However for floating point type, in most cases what is needed is not an equality (or inequality), but a verification that two numbers are or . For that purpose, a parameter that will instruct the...
¿A qué? Todo lo que veo es una advertencia idiota, si es perfectamente válida.
Conversiones booleanas
Un prvalue de tipo integral, de punto flotante, de enumeración sin cobertura, de puntero y de puntero a miembro puede convertirse en un prvalue de tipo bool.
El valor cero (para la integral, el punto flotante y la enumeración sin escalas) y el puntero nulo y los valores del puntero nulo a miembro se convierten en falsos. Todos los demás valores se convierten en verdaderos.
En general, es pura ignorancia escribir estos IsEqual(), IsInf() e IsZerro(). No voy a entrar en la discusión.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Estaba cerrado desde el primer puesto. Cuando el número mínimo se multiplica por algo menos que uno, se obtiene el cero.
¿cómo sería el código correcto?
¿Cómo será el código correcto?
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Características del lenguaje mql5, sutilezas y trucos
fxsaber, 2019.10.28 11:42
compilación: expresión no booleana
no es una buena opción para mí
Yo no lo hago.
Para los estetas, se puede crear una estructura DOBLE con los operadores adecuados. Pero esto tiene poco que ver con la práctica. En el ejemplo práctico original.
ForUM sobre el comercio, los sistemas de comercio automatizados y la comprobación de estrategias
Características del lenguaje mql5, complejidades y técnicas
fxsaber, 2019.10.28 07:24
Que manera de quedar atrapado en la división por cero, incluso con un cheque.De hecho, el error es comprensible. Pero al escribir un código como éste, no siempre es obvio que esa comprobación no es suficiente para evitar la división por cero.
Sólo hay que poner a cero el elemento del array que se está creando. La ausencia de inicialización es lo que provoca las colisiones en este caso. Por eso simplemente hice la puesta a cero en mi código. No quiero molestar con la visión general.
compilación: expresión no booleana
no es una buena opción para mí
Hay algo malo en ti.
Es más confuso por qué dividir por cero da una excepción de fpu, al menos para mí.
Algo te está llevando por el camino equivocado.
fxsaber:
No hay problema.
2019.10.28 20:45:47.010 tst1 (EURUSD,H4) 2.224851351121351e-308 --> true
2019.10.28 20:45:47.010 tst1 (EURUSD,H4) -nan --> true
UPD:
comprobar si hay inf
2019.10.28 22:04:00.163 tst1 (EURUSD,H4) 1. dev = inf ---> false
2019.10.28 22:04:00.163 tst1 (EURUSD,H4) 2. dev = inf ---> true
No hay ningún problema.
Busqué en Google "C++ double zero divide", tu código no funcionará para números no normalizados, necesitas esto:
guión de meditación ))))
Un tema interesante. Encontré algo aquí. Cabe destacar el bloque de teoría.
abs(u - v)/abs(u) <= epsilon && abs(u - v)/abs(v) <= epsilon; // (4)abs(u - v)/abs(u) <= epsilon || abs(u - v)/abs(v) <= epsilon; // (5)De este modo, todas las condiciones de desbordamiento y subdesbordamiento pueden protegerse de forma segura. Sin embargo, lo anterior no funcionará cuando v o u sea cero. En estos casos, la solución es recurrir a un algoritmo diferente, por ejemplo(1).
¿A qué? Todo lo que veo es una advertencia idiota, si es perfectamente válida.
Conversiones booleanas
Un prvalue de tipo integral, de punto flotante, de enumeración sin cobertura, de puntero y de puntero a miembro puede convertirse en un prvalue de tipo bool.
El valor cero (para la integral, el punto flotante y la enumeración sin escalas) y el puntero nulo y los valores del puntero nulo a miembro se convierten en falsos. Todos los demás valores se convierten en verdaderos.
En general, es pura ignorancia escribir estos IsEqual(), IsInf() e IsZerro(). No voy a entrar en la discusión.
¿A qué? Todo lo que veo es una advertencia idiota, si es absolutamente válida.
En general, es una completa ignorancia escribir tales IsEqual(), IsInf(), IsZerro(). No voy a entrar en la discusión.
IsInf() y IsNaN() funcionan,
IsEqual() e IsZerro() son cuestionables, buscados en Google como "truco para el doble".