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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top