Como faço para declarar MAX_DOUBLE em VB6?
Pergunta
De acordo com a ajuda do MSDN para VB6
valores de ponto flutuante pode ser expressa como mmmEeee ou mmmDeee, em que mmm é a mantissa e eee é o expoente (potência de 10). O maior valor positivo de um tipo de dados único é 3.402823E + 38, ou 3,4 vezes de 10 para a fonte de 38; o mais alto valor positivo de um tipo de dados duplo é 1.79769313486232D + 308, ou cerca de 1,8 vezes a 10 para a alimentação 308. Usando D para separar a mantissa e exponente num literal numérico faz com que o valor a ser tratado como um tipo de dados duplo. Da mesma forma, utilizando E da mesma forma trata o valor como um tipo de dados único.
Agora, no VB6 IDE Eu tentei entrar nesta ??p>
const MAX_DOUBLE as Double = 1.79769313486232D+308
No entanto, assim que se afastar dessa linha o IDE lança um erro 6 (Overflow)
AN resultados transbordar quando você tenta fazer uma tarefa que exceda os limites do alvo da atribuição. ...
Assim como faço para obter MAX_DOUBLE (e MIN_DOUBLE para que o assunto) definido?
Solução
Tem que ser um Const? Você pode obter o valor exato do MAX_DOUBLE em uma variável, definindo o padrão de bits correta usando CopyMemory a partir de uma 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
Edit:. Eu esqueci que você também perguntou sobre MIN_DOUBLE, o que é ainda mais fácil
Dim Min As Double
Dim Bits As Byte
Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1
Debug.Print Min
Outras dicas
Editar: Resolvido isso!
Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293
Duplo verifiquei até o nível de binário, que deve ser tão alto quanto você pode ir. Você pode continuar a acrescentar valores como 1 etc, mas produz um número igual a, não maior do que. A saída é a seguinte: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 Que é de fato DoubleMax
antiga: Você pode simplesmente usar infinito positivo .
Óbvio solução alternativa pragmática:. Reduzir o número ligeiramente
Const MAX_DOUBLE As Double = 1.79769313486231E+308
Eu imagino que vai ser adequado na maioria das situações.
Use um "E" para expoente no número em vez de um "D" como esta abaixo.
Public Const MAX_DOUBLE = 1.79769313486232E+308
[editar]
Dê uma olhada neste link abaixo, rolar para o fundo. Este betão exemplo mostra o código como esta construção está a ser empregue. Esperemos que esta ajuda.
http: //www.experts- exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22555684.html