公子相 发表于 2024-4-12 15:41:56

判断操作与加操作

我在VBA中测试加操作和判断操作,发现一个加操作约等于两个判断操作。
    Dim ddd(1000000) As Long
    Dim aaa(1000000) As Long
    Dim ccc(1000000) As Long
    Dim i As Long
    Dim TempsUtilise As Single
   
   QueryPerformanceCounter Counter1
      For i = 0 To 1000000
      
            ccc(i) = aaa(i) + ddd(i)
      Next i
    QueryPerformanceCounter Counter2
   
    TempsUtilise = (Counter2 - Counter1) / Frequency
    MsgBox TempsUtilise
   
   QueryPerformanceCounter Counter1
      For i = 0 To 1000000
            If aaa(i) = 0 Then
'                If ddd(i) = 0 Then
'
'                End If
            End If

      Next i
    QueryPerformanceCounter Counter2
   
    TempsUtilise = (Counter2 - Counter1) / Frequency
    MsgBox TempsUtilise

Msgbox1=0.0434334
Msgbox2=0.0234633

别的语言也是这样吗?

ucobiit 发表于 2024-4-12 15:42:39

补一个图片
https://bbs.emath.ac.cn/data/attachment/forum/202011/15/030211qz2e6tdzdkzk5229.jpg

Geraldufas 发表于 2024-4-12 15:43:28

ccc(i) = aaa(i) + ddd(i)
这个操作包括计算地址aaa//大概是汇编的lea命令读取//对应mov计算地址ddd读取相加计算地址ccc储存//对应mov

            If aaa(i) = 0 Then
'                If ddd(i) = 0 Then
'
'                End If
            End If
在其他语言里,这样的if很可能直接被编译器优化掉

singqing 发表于 2024-4-12 15:44:07

不想抠那么细了。从表面看一下效率就行了。因为有时候纠结于究竟是执行两个判断呢,还是一个加法操作呢, 所以才有这个测试。

efaugko 发表于 2024-4-12 15:44:14

在数组aaa,ddd随机写入一半的1就应该会显著变慢

afijozaci 发表于 2024-4-12 15:44:45

通常来说,加法是快于判断语句的,只是楼主的测试例子不合理,看起来加法更慢
页: [1]
查看完整版本: 判断操作与加操作