@初音七奈 我测试了一下,最慢的肯定是你说的循环乘法,但是我没想到二分法居然比^更快,最快的是Exp(Log(X) * Y)

第一次测试,可以看到Pow1所花的时间最长:

由于Pow1花的时间太长,而其它三个由太短,所以排除Pow1后再加大运算量进一步对比这三个算法之间的差别:

Option Explicit
' VB6自带乘法算法
Public Property Get Pow0(ByVal X As Double, ByVal Y As Long) As Double
Pow0 = X ^ Y
End Property
' 循环乘法,复杂度:O(N)
Public Property Get Pow1(ByVal X As Double, ByVal Y As Long) As Double
Dim I&: Pow1 = 1
For I = 1 To Abs(Y)
Pow1 = Pow1 * X
Next
If Y < 0 Then Pow1 = 1 / Pow1
End Property
' 二分法,复杂度:O(logN)
Public Property Get Pow2(ByVal X As Double, ByVal Y As Long) As Double
Dim I&: I = Abs(Y)
Select Case I
Case 0
Pow2 = 1
Exit Property
Case 1
Pow2 = X
Case Else
Pow2 = Pow2(X, I \ 2)
Pow2 = Pow2 * Pow2
If Y And 1 Then Pow2 = Pow2 * X
End Select
If Y < 0 Then Pow2 = 1 / Pow2
End Property
' 指数对数公式法,复杂度:O1
Public Property Get Pow3(ByVal X As Double, ByVal Y As Long) As Double
Pow3 = Exp(Log(X) * Y)
End Property