標題:
如何 測試 Excel VBA 計算時間間隔的 精確度?
[打印本頁]
作者:
sjgau
時間:
2013-10-24 14:14
標題:
如何 測試 Excel VBA 計算時間間隔的 精確度?
先丟出 一個問題,再慢慢 解答
希望大家有興趣
作者:
sjgau
時間:
2013-10-24 15:31
Sub main()
Dim no, i, t1, t2 As Long
Dim sum, dt As Double
no = 100000000
ct = 0
While (no > 1)
ct = ct + 1
t1 = time1()
sum = 0#
For i = 1 To no
sum = sum + i
Next i
dt = time2(t1)
Cells(ct, 1) = no
Cells(ct, 2) = dt
no = no / 3
Wend
End Sub
Function time1() As Long
Dim a As Double
a = Timer * 1000
time1 = Int(a + 0.5)
End Function
Function time2(ByVal t1 As Long) As Double
Dim t2 As Long
Dim dt As Double
t2 = time1()
dt = (t2 - t1) / 1000#
' dt must >- 0.0
If (dt < 0#) Then
dt = dt + 86400#
End If
time2 = dt
End Function
複製代碼
回復
1#
sjgau
作者:
stillfish00
時間:
2013-10-24 17:09
回復
2#
sjgau
我覺得這樣有問題,Timer傳回的數為Single,
在我的電腦上,Timer傳回的數只會到小數點後第二位,
這個數是已經進位過的,而不該再用 timer1( ) 做四捨五入,
你可能會說,Timer傳回的數如果只到小數點後第二位,timer1( )裡的 a 小數點後就應該都是零,可是不是這樣。
這是因為你的 a 是 Double 資料型態,資料型態之間轉換造成的誤差,可 run 底下程式碼知道有此誤差:
Sub Test()
Dim t1 As Single
Dim d1 As Double
t1 = Timer
Debug.Print "t1=", t1
Debug.Print "Cdbl(t1)=", CDbl(t1)
d1 = t1
Debug.Print "d1=", d1
End Sub
複製代碼
作者:
sjgau
時間:
2013-10-24 17:37
回復
3#
stillfish00
同意 您的看法,
SINGLE 的 精確度,只有 6 - 7位數,
所以,以上的測試 確實不太 科學
作者:
sjgau
時間:
2013-10-24 17:45
回復
3#
stillfish00
Timer 函數
請參閱 範例 特性
傳回一 Single,其內容為從前一個午夜算起到現在所經過的秒數。
語法
Timer
請注意
在 Microsoft Windows中, Timer函數傳回一秒的小數部分。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)