為什麼這篇unsigned signed比較鄉民發文收入到精華區:因為在unsigned signed比較這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者hichcock (快樂一整年 ^^~~~)看板C_and_CPP標題Re: [問題] int...
※ 引述《hichcock (快樂一整年 ^^~~~)》之銘言:
: 前一陣子正好在寫一個高運算量的演算法
: 裡面大部分需要用到的是正整數
: 所以我就全部使用 UINT 來宣告
: 當時的想法是 UINT 應該比 int 的運算來的快
: 因為不需要辨識正負數的問題
: 不過最後當整個演算法完成後
: 我一時興起將全部的 UINT 又改成 int
: 卻發現效率比原本的快上 1 倍 !?
: 這點我無法理解,不知道有人知道原因嗎?
: 我使用的是 VC 6.0
下面是一個簡單的範例:
1. 使用 UINT 運算
#define Number 9999
UINT *Data = new UINT[Number];
UINT i, j, k;
double Q2 = sqrt(2);
UINT Tm = GetTickCount();
for(i = 0;i < Number;i++)
{
k = 0;
for(j = 0;j < Number;j++)
{
k = k + UINT(Q2*i);
}
Data[i] = k;
}
TRACE("UINT : %d\n", GetTickCount()-Tm);
delete Data;
2. 使用 int 運算
#define Number 9999
int *Data = new int[Number];
int i, j, k;
double Q2 = sqrt(2);
UINT Tm = GetTickCount();
for(i = 0;i < Number;i++)
{
k = 0;
for(j = 0;j < Number;j++)
{
k = k + int(Q2*i);
}
Data[i] = k;
}
TRACE("int : %d\n", GetTickCount()-Tm);
delete Data;
這兩段程式在我的電腦跑就差了快 5 秒了
我問過一些較資深的同事,似乎沒有人確定原因
後來我又實驗了一下,似乎是在強制轉型那邊的差異
double -> int 比較快
double -> UINT 比較慢
有強者可以解說一下嗎
--
每一個偉大的故事,都不會在一瞬間就發生,它總是透過一個個小小的奇蹟累積而來
至於今晚的比賽究竟誰會獲勝,事實上每一場比賽都一樣
如果今晚你有非贏不可的理由,那你就.....一定會贏
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.142.11