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)

werfen
  

Ein Ü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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top