Board logo

標題: 一億個 加法運算,大概需要 8.9 秒鐘 [打印本頁]

作者: sjgau    時間: 2013-10-23 11:12     標題: 一億個 加法運算,大概需要 8.9 秒鐘

Sub 計時碼錶()
   Dim byou1, byou2 As Double
   Dim i As Long
   Dim sum As Double
   
   ' integer 只能計算到 32767, 超過的話,程式會當掉
   ' long 只能計算到 2147483647, 超過的話,程式會當掉
   ' double 可以計算到 10^ +308 左右
   
    ' MsgBox "按下確定按鈕後開始計時"
    byou1 = Timer
   
    sum = 0#
    For i = 1 To 100000000
       sum = sum + i
    Next i
   
    ' MsgBox "再按一次確定按鈕停止計時"
    byou2 = Timer
   
    MsgBox "經過的時間為 " & byou2 - byou1 & " 秒, " & sum
    ' 一億個 加法運算,大概需要 8.9 秒鐘,比C++慢了很多
End Sub
作者: sunnyso    時間: 2013-10-23 20:52

我的電腦只要5.2秒
作者: sunnyso    時間: 2013-10-23 20:54

請明白, VBA 比C慢是正常的, 大家的用途大不一樣
作者: myleoyes    時間: 2013-10-23 21:27

回復 2# sunnyso
前輩!
        不會吧!小弟的只要2.9296875
        這是怎麼回事呢?!!
作者: ML089    時間: 2013-10-23 23:02

我的舊電腦竟然可以跑 2.05秒
CPU [email protected]
作者: sunnyso    時間: 2013-10-24 01:09

我的是core T9300
作者: sjgau    時間: 2013-10-25 11:52

  1. Function time1() As Long
  2.    Dim t1 As Double
  3.    Dim t2 As Long
  4.    
  5.    t1 = Timer
  6.    t2 = Int(t1 * 1000# + 0.5)
  7.    ' get milli- seconds
  8.    
  9.    time1 = t2
  10. End Function


  11. Function time2(t1 As Long) As Double
  12.    Dim t2 As Long
  13.    Dim dt As Double
  14.    
  15.    t2 = time1()
  16.    dt = (t2 - t1) / 1000#
  17.    ' get seconds
  18.    
  19.    
  20.    ' dt must >= 0.0
  21.    If (dt < 0#) Then
  22.       dt = dt + 1# * 24 * 60 * 60
  23.       
  24.    End If
  25.    time2 = dt
  26. End Function


  27. Sub test1125()
  28.    Dim no As Long, t1 As Long, t2 As Long, i As Long
  29.    Dim dt As Double, ct As Integer
  30.    Dim sum As Double
  31.    
  32.    no = 100000000
  33.    ct = 5
  34.    
  35.    While (no > 10)
  36.       ct = ct + 1
  37.       t1 = time1()
  38.          sum = 0#
  39.          For i = 1 To no
  40.             sum = sum + i
  41.             
  42.          Next i
  43.       dt = time2(t1)
  44.       
  45.       Cells(ct, 1) = no
  46.       Cells(ct, 2) = sum
  47.       Cells(ct, 3) = dt
  48.       
  49.       no = no / 2
  50.    Wend
  51.    
  52.    MsgBox ("Done! ")
  53. End Sub
複製代碼
回復 6# ML089
作者: ML089    時間: 2013-10-25 13:45

回復 8# sjgau


公司電腦 I5 [email protected] 跑 1.918秒
與家裡電腦(低階CPU)的速度不會差異很多
作者: sjgau    時間: 2013-10-27 08:20

  1. #if 0

  2. s1= 1382833070, s2= 778

  3. s2 < 0, . . .

  4. s1= 4, s2= 812
  5. sum= 5.000000E+017
  6. 請按任意鍵繼續 . . .

  7. #endif
  8. // ----------------------------------------------

  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <sys/timeb.h>

  12. int main(int argc, char *argv[])
  13. {
  14.    struct timeb now;
  15.    int s1, s2;
  16.    
  17.    ftime(&now);
  18.    s1= now.time;
  19.    s2= now.millitm;
  20.    
  21.    printf("s1= %d, s2= %d \n", s1, s2);
  22.    // system("pause");
  23.    // -------------------------------------------
  24.    
  25.    double sum;
  26.    int no, i;
  27.    
  28.    no= 1000000000;
  29.    sum= 0.0;
  30.    for (i=1;i<=no;i++) {
  31.        sum= sum + i;
  32.    }
  33.    
  34.    ftime(&now);
  35.    s1= now.time - s1;
  36.    s2= now.millitm - s2;
  37.    if (s2 < 0) {
  38.       printf("\n s2 < 0, . . . \n");
  39.       s2+= 1000;
  40.       s1--;
  41.    }
  42.    
  43.    printf("\n s1= %d, s2= %d \n", s1, s2);
  44.    printf(" sum= %.6lE \n", sum);
  45.    system("pause");
  46.    
  47.    return 0;
  48. }
複製代碼
回復 1# sjgau
作者: sjgau    時間: 2013-10-27 08:21

C 語言 程式設計,執行 十億個 家法運算,
只需要 4.8秒鐘
作者: Brandy    時間: 2013-10-27 09:17

回復 11# sjgau


    我的excel只要1.73秒,比你的C++快:D [attach]16482[/attach]
難道用2013比較快嗎,我發現EXCEL2013執行VBA常常會當掉,但是存成2003格式再來跑就很順
但是以上是用EXCEL2013直接執行的結果
用2013抓網頁資料比較常會當....怪怪難道是用win7 64位元的比較不相容嗎 我2013也是灌64位元的
作者: sjgau    時間: 2013-10-30 21:48

我本來以為 Excel VBA 是interpreter,
我發現 我錯了

他 應該是 compiler




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)