返回列表 上一主題 發帖

一億個 加法運算,大概需要 8.9 秒鐘

一億個 加法運算,大概需要 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
天下為公

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

他 應該是 compiler
天下為公

TOP

回復 11# sjgau


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

TOP

C 語言 程式設計,執行 十億個 家法運算,
只需要 4.8秒鐘
天下為公

TOP

  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
天下為公

TOP

回復 8# sjgau


公司電腦 I5 760@2.8 跑 1.918秒
與家裡電腦(低階CPU)的速度不會差異很多
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

  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
天下為公

TOP

我的是core T9300
ss

TOP

我的舊電腦竟然可以跑 2.05秒
CPU E7400@2.8GHz
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 2# sunnyso
前輩!
        不會吧!小弟的只要2.9296875
        這是怎麼回事呢?!!

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題