Wie erkläre ich MAX_DOUBLE in VB6?
Frage
Nach der MSDN-Hilfe für VB6
Gleitkommawerte können als mmmEeee oder mmmDeee ausgedrückt werden, in denen mmm die Mantisse und der Exponent eee ist (eine Leistung von 10). Der höchste positive Wert eines einzelnen Datentypen ist 3,402823E + 38 oder die 3,4-fache von 10 bis 38. Kraft; der höchste positive Wert einer Doppeldatentyp ist 1.79769313486232D + 308 oder etwa 1,8 mal 10 an der 308. Kraft. Mit D die Mantisse und Exponenten in Zahlenliteral trennen bewirkt, dass der Wert als Double-Datentyp behandelt werden. Ebenso mit E in der gleichen Art und Weise behandelt Art den Wert als Einzeldaten.
Jetzt in der VB6 IDE Ich habe versucht, diese zu betreten
const MAX_DOUBLE as Double = 1.79769313486232D+308
jedoch, sobald ich von dieser Linie abrücken die IDE einen Fehler 6 (Überlauf)
werfenEin Überlauf ergibt sich, wenn Sie versuchen, eine Zuordnung zu machen, die die Grenzen des Ziel der Zuweisung überschreitet. ...
Wie bekomme ich MAX_DOUBLE (und MIN_DOUBLE was das betrifft) definiert?
Lösung
muss es eine Konst sein? Sie können den genauen Wert von MAX_DOUBLE in eine Variable erhalten, indem das richtige Bitmuster von einem Byte-Array mit Copymemory Einstellung.
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:. Ich habe vergessen, dass Sie auch über MIN_DOUBLE gefragt, was ist noch einfacher
Dim Min As Double
Dim Bits As Byte
Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1
Debug.Print Min
Andere Tipps
Edit: Gelöst es!
Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293
Double geprüft, auf die binären Ebene nach unten, das sollte so hoch sein, wie Sie gehen können. Sie können Werte wie 1 etc halten Zugabe, aber es ergibt sich eine Zahl gleich, nicht größer als. Die Ausgabe ist dies: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 Welches ist in der Tat DoubleMax
Alt: Sie könnten nur Positive Unendlichkeit .
Offensichtliche pragmatische Lösung:. Verringerung der Zahl leicht
Const MAX_DOUBLE As Double = 1.79769313486231E+308
Ich stelle mir vor, dass in den meisten Fällen ausreichend sein werden.
Verwenden Sie ein „E“ für den Exponenten der Zahl anstelle eines „D“ wie diese unten.
Public Const MAX_DOUBLE = 1.79769313486232E+308
[Bearbeiten]
Werfen Sie einen Blick auf diesen Link unten, scrollen Sie nach unten. Dieses konkrete Codebeispiel zeigt, wie dieses Konstrukt verwendet wird. Hoffentlich hilft.
http: //www.experts- exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22555684.html