查看單個文章
舊 2007-12-19, 08:05 PM   #1
a19870504
註冊會員
榮譽勳章

勳章總數0
UID - 283728
在線等級: 級別:2 | 在線時長:15小時 | 升級還需:6小時級別:2 | 在線時長:15小時 | 升級還需:6小時
註冊日期: 2007-10-25
文章: 34
精華: 0
現金: 56 金幣
資產: 56 金幣
預設 請問一下為什麼一定要用clock_t 來宣告變數

小弟的書上後面習題有問到說 clock_t 跟int or long int 一樣嗎?舉個例子還實驗看看

我就用了課本的第一個例題 只是把clock_t 改為 int 型態兩個比較一下 發現到

竟然可以編譯 但是最後的結果有出入

這是使用 int 型態的執行結果
y = 93.519356285
CLOCKS_PER_SEC is:
1000000
運算1000000次所需要的時間:
0.020000000sec
每次運算所花費的時間是:
2.00000000e-08sec

這是使用 clock_t 宣告的執行結果
y = 93.519356285
CLOCKS_PER_SEC is:
1000000
運算1000000次所需要的時間:
0.010000000sec
每次運算所花費的時間是:
1.00000000e-08sec

source code :
1 #include <iostream>
2 #include <iomanip>
3 #include <cmath>
4 #include <ctime>
5 using namespace std;
6
7 int main()
8 {
9 clock_t start, finish; //只有這裡改變
10 double x = 8745.87, y;
11 double abcd ;
12 int ee = 1000000 ;
13 start = clock ();
14 for(int i=0; i < ee; i++) y =sqrt(x);
15 finish = clock();
16
17 cout << setiosflags(ios::fixed) << setiosflags(ios::right)
18 << setiosflags(ios::showpoint) << setprecision(9) ;
19 cout << "y = " << setw(10) << y << endl;
20 abcd = double(finish-start)/CLOCKS_PER_SEC;
21 cout << "CLOCKS_PER_SEC is: \n" << CLOCKS_PER_SEC << endl;
22 cout << "運算" << ee << "次所需要的時間: \n"
23 << abcd << "sec" <<endl;
24 cout << "每次運算所花費的時間是:\n"
25 << setiosflags(ios::scientific) //使用科學表示法
26 << abcd / double(ee) << "sec" << endl;
27 return 0;
28 }

問題1.為什麼我前面的CLOCKS_PER_SEC 會是1000000 而不是跟課本一樣是1000.0000000
我對照課本都一模一樣??
問題2.書上是說使用ctime這個 header file 就一定要用 clock_t 來宣告
為什麼我用其他資料型態也可以編譯且也可以執行 但是結果卻是多一倍的時間??

此帖於 2007-12-19 11:26 PM 被 a19870504 編輯.
a19870504 目前離線  
送花文章: 0, 收花文章: 6 篇, 收花: 14 次
回覆時引用此帖