В VBA почему сравнение двух дублей происходит быстрее, чем сравнение двух длинных - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь оптимизировать скорость моего кода. Мой оригинальный код сравнивал две цены, поэтому я использовал double. Но потом я подумал, что, возможно, изменение их на длинные может ускорить процесс. Но время для сравнения двух двойных кажется почти вдвое меньше, чем для сравнения двух длинных. Почему это так?

Запустите переменные m, n, p как long или double

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 ]

2 голосов
/ 31 октября 2019

Каждый программист 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 голосов
/ 31 октября 2019

Прежде всего сделайте ясный и правильный тест.

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 для получения дополнительной информации о возвращаемых значениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...