質問

VB6のためのMSDNのヘルプによると

  

浮動小数点値はMMMは仮数及びEEEは指数(10のパワー)であるである、mmmEeee又はmmmDeeeとして表すことができます。単一のデータ・タイプの最も高い正の値は38乗3.402823E + 38、または3.4〜10倍です。ダブルデータ型の最も高い正の値は第三百八パワー1.79769313486232D + 308、又は約1.8〜10倍です。数値リテラルにおける仮数と指数を分離するためにDを使用してダブルデータ型として処理されるべき値を生じます。同様に、同じ方法でEを使用すると、単一のデータ型として値を扱います。

今VB6のIDEで、私はこれを入力しようとしました。

const MAX_DOUBLE as Double = 1.79769313486232D+308

しかし、できるだけ早く私は離れて、その行から移動すると、IDEは、エラー6(オーバーフロー)

をスローします
  

オーバーフローの結果は、あなたは、割り当ての対象の限界を超えた割り当てを作るしようとします。 ...

それでは、どのように私は(そのことについてとMIN_DOUBLE)MAX_DOUBLEを得るのですか定義された?

役に立ちましたか?

解決

それはのConstでなければなりませんか?あなたはバイト配列からCopyMemoryを使用して正しいビットパターンを設定することにより、変数にMAX_DOUBLEの正確な値を得ることができます。

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

編集:私はあなたにもさらに簡単ですMIN_DOUBLE、について尋ねられたことを忘れていました。

Dim Min As Double
Dim Bits As Byte

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

Debug.Print Min

他のヒント

編集: それを解決しよう!

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

ダブルあなたが行くことができる限り高くすべきであるバイナリレベルにそれをチェックします。あなたは1などのように値を追加し続けることができますが、それは超えていないに等しい数を出します。 出力はこれです: 01111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 確かにDoubleMaxどちらである

旧: あなただけの正の無限大を使用することができますのます。

明白な実用的な回避策:わずか数を減らす

Const MAX_DOUBLE As Double = 1.79769313486231E+308

私は、ほとんどの状況で十分であるだろうと想像ます。

の代わりに以下のような「D」の数の指数は、「E」を使用します。

Public Const MAX_DOUBLE = 1.79769313486232E+308

[編集]

以下は、このリンクを見てみましょう、一番下までスクロールします。この具体的なコード例は、この構築物が使用されている方法を示しています。うまくいけば、このことができます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top