在VBA中,为什么比较两个双精度点比比较两个双精度点更快

时间:2019-10-31 02:56:30

标签: vba compare double long-integer

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

将变量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

2 个答案:

答案 0 :(得分:2)

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

def save(self, *args, **kwargs):
    #Code here
    if self.courses = "ABM":
        self.x = Model2.objects.get(id=x) #Whatever code you want
    super(model_name, self).save(*args, **kwargs)

x,y,m,n声明为Dim x, y, z As Integer Dim m, n, p As Double ,然后VBA将在运行时决定类型。以这种方式声明变量

Variant

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

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

答案 1 :(得分: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,以获取有关返回值的更多信息。