如何在 VB6 中声明 MAX_DOUBLE?

问题描述 投票:0回答:4

根据VB6的MSDN帮助

浮点值可以表示为 mmmEeee 或 mmmDeee,其中 mmm 是尾数,eee 是指数(10 的幂)。 Single 数据类型的最大正值为 3.402823E+38,即 3.4 乘以 10 的 38 次方; Double 数据类型的最大正值是 1.79769313486232D+308,即大约 1.8 乘以 10 的 308 次方。使用 D 分隔数字文字中的尾数和指数会导致该值被视为 Double 数据类型。同样,以相同的方式使用 E 会将值视为单一数据类型。

现在在 VB6 IDE 中我尝试输入这个

const MAX_DOUBLE as Double = 1.79769313486232D+308

但是,一旦我离开该行,IDE 就会抛出错误 6(溢出)

当您尝试进行超出分配目标限制的分配时,就会导致溢出。 ...

那么我如何定义 MAX_DOUBLE (以及 MIN_DOUBLE)?

ide vb6 constants max minimum
4个回答
6
投票

编辑: 解决了!

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

仔细检查二进制级别,这应该是你能达到的最高水平。您可以继续添加 1 等值,但它会产生一个等于而不大于的数字。 输出是这样的:

01111111|11101111|11111111|11111111|11111111|11111111|11111111|11111111

这确实是 DoubleMax。

旧: 您可以只使用正无穷大


4
投票

它必须是一个常量吗?您可以通过使用字节数组中的 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

0
投票

明显实用的解决方法:稍微减少数量。

Const MAX_DOUBLE As Double = 1.79769313486231E+308

我想这在大多数情况下就足够了。


-2
投票

使用“E”表示数字中的指数,而不是像下面这样的“D”。

Public Const MAX_DOUBLE = 1.79769313486232E+308

[编辑]

看看下面的这个链接,滚动到底部。这个具体的代码示例展示了如何使用这个构造。希望这有帮助。

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

© www.soinside.com 2019 - 2024. All rights reserved.