Discusión sobre el artículo "Particularidades del trabajo con números del tipo double en MQL4"

 

Artículo publicado Particularidades del trabajo con números del tipo double en MQL4:

En estos apuntes hemos reunido consejos para resolver los errores más frecuentes al trabajar con números del tipo double en los programas en MQL4.

Autor: MetaQuotes Software Corp.

 
Tengo una situación a la que no puedo implementar alguna solución nombrada anteriormente. Al hacer una multiplicación por 10 dentro de un ciclo “while”, en la segunda iteración me genera un número extraordinario, no puedo precisar los dígitos que quiero visualizar porque el ciclo precisamente se detiene cuando llega al último con la intención de conocer los dígitos que existen en algún número determinado que se genera a través de una división. Si los precioso a través de un NormalizeDouble no sabré cuanto dígitos originales habían. Puse la función MathAbs para que generara el valor absoluto porque supuse podría funcionar pero tampoco me funciona, alguien que me pueda ayudar?
Archivos adjuntos:
image.jpg  5105 kb
 
Rafacontrol95 #:
Tengo una situación a la que no puedo implementar alguna solución nombrada anteriormente. Al hacer una multiplicación por 10 dentro de un ciclo “while”, en la segunda iteración me genera un número extraordinario, no puedo precisar los dígitos que quiero visualizar porque el ciclo precisamente se detiene cuando llega al último con la intención de conocer los dígitos que existen en algún número determinado que se genera a través de una división. Si los precioso a través de un NormalizeDouble no sabré cuanto dígitos originales habían. Puse la función MathAbs para que generara el valor absoluto porque supuse podría funcionar pero tampoco me funciona, alguien que me pueda ayudar?
Entiendo que estás teniendo problemas al implementar una solución en MQL4 donde al realizar una multiplicación por 10 dentro de un bucle "while", en la segunda iteración obtienes un número inesperadamente grande, y no puedes precisar los dígitos que deseas visualizar. Además, mencionas que utilizas NormalizeDouble para tratar de conocer los dígitos originales pero no estás obteniendo los resultados deseados.

Si estás tratando de trabajar con valores numéricos grandes y quieres evitar que se generen cantidades excesivas de dígitos, la función NormalizeDouble no te ayudará en este caso, ya que su propósito principal es redondear los valores de doble precisión a un número específico de dígitos decimales.

Para abordar tu problema, es importante entender por qué se está generando un número extraordinariamente grande en la segunda iteración de tu bucle "while". Algunas cosas a  considerar:

1. Desbordamiento de variables: Si estás utilizando variables de tipo entero en MQL4, ten en cuenta que tienen límites en sus valores (pueden ser de -2,147,483,648 a 2,147,483,647 para int). Asegúrate de que tu variable puede contener el resultado de la multiplicación por 10 sin desbordarse.

2. Uso de variables temporales: Puedes intentar utilizar variables temporales para almacenar valores intermedios durante la multiplicación por 10, de esta manera puedes controlar y monitorear los cambios en los valores.

3. Utilizar funciones de redondeo: Dependiendo de tus necesidades, puedes considerar el uso de funciones de redondeo como MathRound, MathCeil o MathFloor para ajustar el resultado de la multiplicación a un número manejable.
 
@Enrique Enguix, Muchas gracias por la pronta respuesta.
Enrique Enguix #: 1. Desbordamiento de variables: Si estás utilizando variables de tipo entero en MQL4, ten en cuenta que tienen límites en sus valores (pueden ser de -2,147,483,648 a 2,147,483,647 para int). Asegúrate de que tu variable puede contener el resultado de la multiplicación por 10 sin desbordarse.

La variable es de tipo double sabe cuál es el límite de los valores de este tipo?

Enrique Enguix #: 2. Uso de variables temporales: Puedes intentar utilizar variables temporales para almacenar valores intermedios durante la multiplicación por 10, de esta manera puedes controlar y monitorear los cambios en los valores.

Lo he implementado pero no me ha dado resultado

Enrique Enguix #: 3. Utilizar funciones de redondeo: Dependiendo de tus necesidades, puedes considerar el uso de funciones de redondeo como MathRound, MathCeil o MathFloor para ajustar el resultado de la multiplicación a un número manejable.

Igualmente lo he implementado pero el resultado hace que desconozca el resultado original de la variable

Razón de la queja: