史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2007-12-19, 08:05 PM   #1
a19870504
註冊會員
榮譽勳章

勳章總數
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 次
回覆時引用此帖
舊 2007-12-20, 03:56 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9834小時 | 升級還需:162小時級別:97 | 在線時長:9834小時 | 升級還需:162小時級別:97 | 在線時長:9834小時 | 升級還需:162小時級別:97 | 在線時長:9834小時 | 升級還需:162小時級別:97 | 在線時長:9834小時 | 升級還需:162小時級別:97 | 在線時長:9834小時 | 升級還需:162小時級別:97 | 在線時長:9834小時 | 升級還需:162小時
註冊日期: 2002-12-07
文章: 13335
精華: 0
現金: 26432 金幣
資產: 3024292 金幣
預設

引用:
作者: a19870504 查看文章
小弟的書上後面習題有問到說 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 來宣告
為什麼我用其他資料型態也可以編譯且也可以執行 但是結果卻是多一倍的時間??
Q1:
理應是 1000,請搜尋你的 C++開發軟體之 time.h (ctime是由 time.h衍申而來)
沒有意外的話其定義是
#define CLOCKS_PER_SEC ((clock_t)1000)
而 clock_t 是
typedef long clock_t;

所以
clock_t 是 long 型態的別名
CLOCKS_PER_SEC 其實就是 1000

Q2:
既然 clock_t 其實就是 long 型態的別名
所以只要 finish = clock();
可以通過編譯
改成 其他資料型態 ※ 當然沒問題
至於
為何會多花時間
請多試幾次看看可能會有不同結果
(可能與 clock() 精密度有關)


在目前的 32 位元個人電腦上, long int 其實和 int 一樣, 都是用 32 位元 (4 bytes) 來記錄整數值
(範圍都是
int 2147483647 ~ -2147483648
long 2147483647 ~ -2147483648 )。
mini 目前離線  
送花文章: 2011, 收花文章: 7996 篇, 收花: 26798 次
回覆時引用此帖
發文 回覆


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
請問一下asx檔是什麼? 1207 一般電腦疑難討論區 2 2003-03-19 10:52 AM
請問一下∼為什麼用數位相機拍的影像用windows media player不能看? important 一般電腦疑難討論區 6 2003-03-07 01:25 AM
請問一下 PCcillin2002 為什麼有錯誤 jagk 軟體應用問題討論區 0 2003-02-28 11:51 AM
請問一下ISO的檔案要用什麼開阿..... scott 一般電腦疑難討論區 6 2003-01-21 01:59 AM


所有時間均為台北時間。現在的時間是 11:43 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1