知識社群登入
time() 的計算時間的 精確度
by 高顯忠, 2010-11-15 11:06, 人氣(1488)
只有到 秒。
以下的程式的 輸出,可以看出一些 奇怪的現象。

#if 0

no=           10, sum=           55, dt=     0
no=           30, sum=          465, dt=     0
no=           90, sum=         4095, dt=     0
no=          270, sum=        36585, dt=     0
no=          810, sum=       328455, dt=     0
no=         2430, sum=      2953665, dt=     0
no=         7290, sum=     26575695, dt=     0
no=        21870, sum=    239159385, dt=     0
no=        65610, sum=  -2142598441, dt=     0
no=       196830, sum=  -2103713615, dt=     0
no=       590490, sum=  -1754143841, dt=     0
no=      1771470, sum=   1390803145, dt=     0
no=      5314410, sum=   -372987993, dt=     0
no=     15943230, sum=    922132129, dt=     0
no=     47829690, sum=   -338575121, dt=     1

上面的時間 1, 乘以 3, 為何是 0, ???

no=    143489070, sum=   1104302137, dt=     0
上面的時間 0, 乘以 3, 為何是 2, ???

no=    430467210, sum=    918317431, dt=     2
no=   1291401630, sum=  -1616479343, dt=     5
Press any key to continue

#endif
// ----------------------------------------------

#include <time.h>
#include <math.h>
#include <stdio.h>

void main()
{
int no, t1, t2, sum, i;
no= 10;
while (no > 0) {
t1= time(NULL);
sum= 0;
for (i=1;i<=no;i++) {
sum+= i;
}
t2= time(NULL);
printf("no= %12d, sum= %12d, dt= %5d\n", no, sum, (t2 - t1));
no*= 3;// 為何不是 乘以2, ...
}
}// end of main()


因為,電腦使用 二進位,累乘以 2, 會得到一些 奇怪的結果,
有興趣的,可以自己 試試看,。。。