在VBA中,为什么比较两个double比比较两个long更快

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

我正在尝试优化代码的速度。我原来的代码比较两个价格,所以我使用了两倍。但是后来我想也许将它们更改为长时可能会加快该过程。但是比较两个双倍的时间似乎几乎是比较两个多角的时间的一半。为什么会这样?

将变量m,n,p长或双运行

Sub FastTest()
Dim x, y, z As Integer
Dim m, n, p As Double
'Dim m, n, p As Long
Dim StartTime As Double

StartTime = Timer()

'm = CLng(115658573)
'n = CLng(45357896)

m = 115658573
n = 45357896

For x = 1 To 1000
    For y = 1 To 1000
        For z = 1 To 100
            If m > n Then
                p = m + n
            End If
        Next
    Next
Next

MsgBox Timer - StartTime
End Sub

vba compare double long-integer
2个回答
2
投票

每个VBA程序员都陷入了这个陷阱。在此声明中

Dim x, y, z As Integer
Dim m, n, p As Double

x,y,m,n被声明为Variant,然后VBA将在运行时决定类型。以这种方式声明变量

Dim x As Long, y As Long, z As Long
Dim m As Double, n As Double, p As Double

然后再次运行测试,让我知道结果:)

+ 1:将整数声明为Long。您可能认为可以使用2个字节的整数来节省内存,但这是一项兼容性功能,VBA仍会在运行时将其转换为long。


0
投票

首先要明确正确的测试。

Dim m, n, p As Double
Debug.Print "m:=" & VarType(m) & " n:=" & VarType(n) & " p:=" & VarType(p)

返回:m:=0 n:=0 p:=5

Dim m, n, p As Double
m = 115658573
n = 45357896
p = m + n
Debug.Print "m:=" & VarType(m) & " n:=" & VarType(n) & " p:=" & VarType(p)

返回:m:=3 n:=3 p:=5

Dim m As Double
Dim n As Double
Dim p As Double
Debug.Print "m:=" & VarType(m) & " n:=" & VarType(n) & " p:=" & VarType(p)

返回:m:=5 n:=5 p:=5

查看VarType function以获取有关返回值的更多信息。

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