4

VB6のMSDNヘルプによると

浮動小数点値は、mmmEeeeまたはmmmDeeeとして表すことができます。ここで、mmmは仮数、eeeは指数(10の累乗)です。単一データ型の最大の正の値は3.402823E+38、つまり10の38乗の3.4倍です。Doubleデータ型の最大の正の値は1.79769313486232D+308、つまり10の308乗の約1.8倍です。Dを使用して数値リテラルの仮数と指数を区切ると、値はDoubleデータ型として扱われます。同様に、Eを同じ方法で使用すると、値は単一のデータ型として扱われます。

今VB6IDEで私はこれを入力しようとしました

const MAX_DOUBLE as Double = 1.79769313486232D+308

ただし、その行から離れるとすぐに、IDEはエラー6(オーバーフロー)をスローします。

割り当てのターゲットの制限を超える割り当てを行おうとすると、オーバーフローが発生します。..。

では、MAX_DOUBLE(さらに言えばMIN_DOUBLE)を定義するにはどうすればよいですか?

4

4 に答える 4

5

編集:それを解決しました!

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

バイナリレベルまでダブルチェックしました。これは、可能な限り高くする必要があります。1などの値を追加し続けることができますが、に等しい、またはそれ以下の数値が生成されます。出力は次のとおりです。01111111|11101111| 11111111 | 11111111 | 11111111 | 11111111 | 11111111|11111111これは確かにDoubleMaxです

Old:正の無限大を使用できます。

于 2009-06-01T03:46:52.760 に答える
4

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
于 2009-05-30T19:49:03.237 に答える
0

明らかな実用的な回避策:数を少し減らします。

Const MAX_DOUBLE As Double = 1.79769313486231E+308

ほとんどの状況でそれで十分だと思います。

于 2009-05-30T06:56:43.967 に答える
-1

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

Public Const MAX_DOUBLE = 1.79769313486232E+308

[編集]

下のこのリンクを見て、一番下までスクロールしてください。この具体的なコード例は、この構成がどのように使用されているかを示しています。うまくいけば、これがお役に立てば幸いです。

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

于 2009-05-30T05:30:06.417 に答える