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

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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top