Question

Selon l'aide MSDN pour VB6

  

Les valeurs à virgule flottante peuvent être exprimées comme mmmEeee ou mmmDeee, dans lequel mmm est la mantisse et eee est l'exposant (puissance de 10). La valeur positive la plus élevée d'un type de données unique est 3.402823E + 38, soit 3,4 fois 10 à la puissance 38; la plus grande valeur positive d'un type de données Double est 1.79769313486232D + 308, soit environ 1,8 fois 10 à la puissance 308e. En utilisant D pour séparer la mantisse et exposant dans un littéral numérique provoque la valeur à traiter comme un type de données Double. De même, en utilisant E de la même façon traite la valeur en tant que type de données unique.

Maintenant dans l'IDE VB6 J'ai essayé d'entrer dans cette

const MAX_DOUBLE as Double = 1.79769313486232D+308

Cependant, dès que j'éloigne de cette ligne de l'EDI renvoie une erreur 6 (débordement)

  

Un résultat de débordement lorsque vous essayez de faire une mission qui dépasse les limites de l'objectif de la mission. ...

Alors, comment puis-je obtenir MAX_DOUBLE (et MIN_DOUBLE pour cette matière) définie?

Était-ce utile?

La solution

At-il être une Const? Vous pouvez obtenir la valeur exacte de MAX_DOUBLE dans une variable en réglant la configuration binaire correcte à l'aide CopyMemory à partir d'un tableau d'octets.

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

Modifier. J'ai oublié que vous avez aussi posé des questions sur MIN_DOUBLE, ce qui est encore plus facile

Dim Min As Double
Dim Bits As Byte

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

Debug.Print Min

Autres conseils

Edit: Résolu le problème!

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

revérifié vers le bas au niveau binaire, qui devrait être aussi haut que vous pouvez aller. Vous pouvez continuer à ajouter des valeurs comme 1, etc, mais il donne un nombre égal, ne dépassant pas. La sortie est la suivante: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 Ce qui est en effet DoubleMax

Vieux: Vous pouvez simplement utiliser positif infini .

Obvious solution pragmatique:. Réduire le nombre légèrement

Const MAX_DOUBLE As Double = 1.79769313486231E+308

J'imagine que ce sera suffisant dans la plupart des situations.

Utilisez un « E » pour l'exposant du nombre au lieu d'un « D » comme celui-ci ci-dessous.

Public Const MAX_DOUBLE = 1.79769313486232E+308

[modifier]

Jetez un oeil à ce lien ci-dessous, faites défiler vers le bas. Cet exemple concret de code montre comment cette construction est employé. Espérons que cela aide.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top