Domanda

Secondo l'aiuto di MSDN per VB6

  

valori a virgola mobile possono essere espressi come mmmEeee o mmmDeee, in cui mmm è la mantissa e eee è l'esponente (una potenza di 10). Il massimo valore positivo di un tipo di dati singola è 3.402823E + 38, o 3,4 volte 10 alla potenza 38a; il massimo valore positivo di un tipo di dati Double è 1.79769313486232D + 308, o circa 1,8 volte 10 alla potenza 308a. Utilizzando D per separare la mantissa e in un esponente letterale numerico determina il valore di essere trattato come un tipo di dati Double. Analogamente, utilizzando E nello stesso modo considera il valore come un tipo di dati standard.

Ora, nella IDE VB6 Ho cercato di entrare in questo

const MAX_DOUBLE as Double = 1.79769313486232D+308

Tuttavia, non appena mi allontano da quella linea l'IDE genera un errore 6 (overflow)

  

Un risultato di overflow quando si tenta di fare un incarico che supera i limiti del target della cessione. ...

Quindi, come faccio ad avere MAX_DOUBLE (e MIN_DOUBLE per questo) definito?

È stato utile?

Soluzione

Essa non deve essere un Const? È possibile ottenere il valore esatto di MAX_DOUBLE in una variabile impostando il bit pattern corretto utilizzando CopyMemory da un array di byte.

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

Modifica:. Ho dimenticato che lei ha chiesto anche di MIN_DOUBLE, che è ancora più facile

Dim Min As Double
Dim Bits As Byte

Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1

Debug.Print Min

Altri suggerimenti

Modifica: Risolto!

Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293

controllati due volte verso il basso per il livello binario, che dovrebbe essere il più in alto si può andare. È possibile continuare ad aggiungere valori come 1, ecc, ma produce un numero pari a, non superiore. L'uscita è questo: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 Che è davvero DoubleMax

Vecchia: Si potrebbe utilizzare positivo infinito .

Ovvio soluzione pragmatica:. Ridurre leggermente il numero

Const MAX_DOUBLE As Double = 1.79769313486231E+308

Immagino che sarà sufficiente nella maggior parte delle situazioni.

Utilizzare una "E" per l'esponente del numero invece di una "D" come questo qui sotto.

Public Const MAX_DOUBLE = 1.79769313486232E+308

[modifica]

Date un'occhiata a questo link qui sotto, scorrere fino alla fine. Questo esempio di codice concreto mostra come è stato impiegato questo costrutto. Speriamo che questo aiuta.

http: //www.experts- exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22555684.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top