如何 測試 Excel VBA 計算時間間隔的 精確度?
- 帖子
- 145
- 主題
- 45
- 精華
- 0
- 積分
- 190
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台北市
- 註冊時間
- 2013-10-18
- 最後登錄
- 2014-3-29
|
如何 測試 Excel VBA 計算時間間隔的 精確度?
|
天下為公
|
|
|
|
|
- 帖子
- 145
- 主題
- 45
- 精華
- 0
- 積分
- 190
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台北市
- 註冊時間
- 2013-10-18
- 最後登錄
- 2014-3-29
|
2#
發表於 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 |
|
天下為公
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
3#
發表於 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
複製代碼 |
|
|
|
|
|
|
- 帖子
- 145
- 主題
- 45
- 精華
- 0
- 積分
- 190
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台北市
- 註冊時間
- 2013-10-18
- 最後登錄
- 2014-3-29
|
4#
發表於 2013-10-24 17:37
| 只看該作者
回復 3# stillfish00
同意 您的看法,
SINGLE 的 精確度,只有 6 - 7位數,
所以,以上的測試 確實不太 科學 |
|
天下為公
|
|
|
|
|
- 帖子
- 145
- 主題
- 45
- 精華
- 0
- 積分
- 190
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台北市
- 註冊時間
- 2013-10-18
- 最後登錄
- 2014-3-29
|
5#
發表於 2013-10-24 17:45
| 只看該作者
回復 3# stillfish00
Timer 函數
請參閱 範例 特性
傳回一 Single,其內容為從前一個午夜算起到現在所經過的秒數。
語法
Timer
請注意
在 Microsoft Windows中, Timer函數傳回一秒的小數部分。 |
|
天下為公
|
|
|
|
|