¿Cómo declaro MAX_DOUBLE en VB6?
Pregunta
De acuerdo con la ayuda de MSDN para Visual Basic 6
valores de coma flotante se pueden expresar como mmmEeee o mmmDeee, en el que mmm es la mantisa y eee es el exponente (una potencia de 10). El valor positivo más alto de un tipo de datos individual es 3,402823E + 38, o 3,4 veces 10 a la potencia 38a; el valor positivo más alto de un tipo de datos Double es 1.79769313486232D + 308, o alrededor de 1,8 veces 10 a la potencia 308a. Uso de D para separar la mantisa y exponente en un literal numérico hace que el valor a ser tratado como un tipo de datos dobles. Del mismo modo, el uso de E de la misma manera trata el valor como un tipo de datos único.
Ahora en el IDE de VB6 que he tratado de entrar en este
const MAX_DOUBLE as Double = 1.79769313486232D+308
Sin embargo, tan pronto como me alejo de esa línea el IDE genera un error 6 (overflow)
Se produce un desbordamiento cuando se trata de hacer una tarea que supera las limitaciones del destino de la asignación. ...
Entonces, ¿cómo hago para que MAX_DOUBLE (y MIN_DOUBLE para el caso) se define?
Solución
¿Tiene que ser un Const? Usted puede obtener el valor exacto de MAX_DOUBLE en una variable estableciendo el patrón de bits correcta utilizando CopyMemory a partir de una matriz de bytes.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim Max As Double
Dim Idx As Long
Dim Bits(0 To 7) As Byte
For Idx = 0 To 5
Bits(Idx) = 255
Next
Bits(6) = 239 ' = 11101111
Bits(7) = 127
For Idx = 0 To 7
CopyMemory ByVal VarPtr(Max) + Idx, Bits(Idx), 1
Next
Debug.Print Max
Editar:. Olvidé que también le preguntará sobre MIN_DOUBLE, lo que es aún más fácil
Dim Min As Double
Dim Bits As Byte
Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1
Debug.Print Min
Otros consejos
Editar: Resuelto!
Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293
Doble comprobó hasta el nivel binario, que debe ser lo más alto que puede ir. Puede seguir añadiendo valores como 1, etc. pero se obtiene un número igual, no es mayor que. La salida es la siguiente: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 ¿Qué es, en efecto DoubleMax
antigua: Se podía usar el infinito positivo .
Obviamente solución pragmática:. Reducir ligeramente el número
Const MAX_DOUBLE As Double = 1.79769313486231E+308
Me imagino que eso será suficiente en la mayoría de las situaciones.
Utilice una "E" para el exponente en el número en lugar de una "D" como esto más adelante.
Public Const MAX_DOUBLE = 1.79769313486232E+308
[editar]
Tome un vistazo a este enlace de abajo, desplácese hasta la parte inferior. Este ejemplo de código concreto muestra cómo se está empleando esta construcción. Esperemos que esto ayuda.
http: //www.experts- exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22555684.html