2007-12-20
計算時間的副程式
关键字: C
精確度可以到 10 ms
// file: psc51.cpp
// for time1(), time2()
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/timeb.h>
#include <time.h>
// ----------------------------------------------
#include "sj01.h"
// ----------------------------------------------
// time1(&t1);
void time1(long *t1)
{
/* FTIME.C: This program uses _ftime to obtain the current
* time and then stores this time in timebuffer.
millitm
Fraction of a second in milliseconds.
time
Time in seconds since midnight (00:00:00), January 1, 1970, coordinated universal time (UTC).
*/
struct _timeb timebuffer;
// char *timeline;
long t2, t3, t4, t5, t6;
_ftime( &timebuffer );
// timeline = ctime( & ( timebuffer.time ) );
t2= timebuffer.time;// 秒
t3= t2%(1L*24L*60L*60L);
t4= t3*1000L;
t5= timebuffer.millitm;// 千分之ㄧ秒
t6= t4 + t5;
*t1= t6;
// printf( "The time is %.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20] );
// printf("%ld, %ld, %ld, %ld, %ld, \n",
// t2, t3, t4, t5, t6);
}// end of time1()
// ----------------------------------------------
// time2( t1, &dt);
void time2(long t1, double *dt)
{
long t2;
time1(&t2);
*dt= (t2 - t1)/1000.0;
// (*dt) >= 0
if ((*dt) < 0) {
(*dt)+= 1.0*24.0*60.0*60.0;
}
}// end of time2()
// ----------------------------------------------
void main()
{
int no, sum, i, ct1= 0;
long t1;
double dt;
// ----------------------------------------------
no= 10;
skip(3);
while (no > 0) {
time1(&t1);
sum= 0;
for (i=1;i<=no;i++) {
sum+= i;
}
time2(t1, &dt);
// ----------------------------------------------
ct1++;
printf("ct1= %3ld, no= %12ld, sum= %12ld, t1= %8ld, dt= %8.4lf\n",
ct1, no, sum, t1, dt);
if (dt > 0) {
pause();
}
if (ct1>=16) {
// break;
}
no*= 2;
}
skip(1);
printf("*** end of program!\n");
}// end of main()
评论
sjgau
2007-12-20
以下程式,可以證明 最小的時間間隔是
10 ms
10 ms
// file: psc51.cpp
// for time1(), time2(), min. dt= 0.01 second, 10 ms
/*
no= 2000000000, sum= -1973237248, dt= 9.9840
no= 1818181818, sum= 996434927, dt= 9.0630
no= 1652892561, sum= -1341125159, dt= 8.2520
no= 1502629601, sum= -796977071, dt= 7.4910
no= 1366026910, sum= 574788113, dt= 6.8100
no= 1241842646, sum= -1808278179, dt= 6.1890
no= 1128947860, sum= -626730222, dt= 5.6380
no= 1026316236, sum= -525053650, dt= 5.1270
no= 933014760, sum= -1953325164, dt= 4.6570
no= 848195236, sum= -1742216230, dt= 4.2260
no= 771086578, sum= 478252763, dt= 3.8450
no= 700987798, sum= 512634557, dt= 3.4950
no= 637261635, sum= -1422935706, dt= 3.1650
no= 579328759, sum= 891927204, dt= 2.8940
no= 526662508, sum= 1623693438, dt= 2.6240
no= 478784098, sum= -1385563149, dt= 2.3830
no= 435258271, sum= 511561776, dt= 2.1740
no= 395689337, sum= -128593835, dt= 1.9720
no= 359717579, sum= -939025438, dt= 1.7930
no= 327015981, sum= -1121912565, dt= 1.6320
no= 297287256, sum= -1212973492, dt= 1.4820
no= 270261141, sum= 1592856615, dt= 1.3420
no= 245691947, sum= -1959145294, dt= 1.2220
no= 223356315, sum= -1462032198, dt= 1.1120
no= 203051195, sum= 163962026, dt= 1.0110
no= 184591996, sum= -1885152954, dt= 0.9210
no= 167810905, sum= -1413653979, dt= 0.8320
no= 152555368, sum= 585667796, dt= 0.7610
no= 138686698, sum= 1458987879, dt= 0.6910
no= 126078817, sum= -1654396655, dt= 0.6310
no= 114617106, sum= -2042659797, dt= 0.5710
no= 104197369, sum= -699008107, dt= 0.5200
no= 94724881, sum= -990722791, dt= 0.4710
no= 86113528, sum= 1938134684, dt= 0.4310
no= 78285026, sum= -1795049421, dt= 0.3900
no= 71168205, sum= -2009564549, dt= 0.3610
no= 64698368, sum= 1879940096, dt= 0.3200
no= 58816698, sum= -1577963537, dt= 0.2910
no= 53469726, sum= -1024037167, dt= 0.2800
no= 48608841, sum= 1671809933, dt= 0.2400
no= 44189856, sum= 1088312912, dt= 0.2210
no= 40172596, sum= 1774039906, dt= 0.1900
no= 36520542, sum= -264835471, dt= 0.1900
no= 33200493, sum= 1885931755, dt= 0.1600
no= 30182266, sum= -971169585, dt= 0.1610
no= 27438424, sum= 1160863180, dt= 0.1300
no= 24944021, sum= 443177767, dt= 0.1300
no= 22676383, sum= -442920912, dt= 0.1100
no= 20614894, sum= 2020588057, dt= 0.1000
no= 18740812, sum= 698748526, dt= 0.0900
no= 17037102, sum= 190898617, dt= 0.0910
no= 15488275, sum= 2082273854, dt= 0.0800
no= 14080250, sum= -1118120305, dt= 0.0700
no= 12800227, sum= 705821974, dt= 0.0600
no= 11636570, sum= -977953409, dt= 0.0600
no= 10578700, sum= -381797938, dt= 0.0600
no= 9617000, sum= -563567532, dt= 0.0400
no= 8742727, sum= 1023069820, dt= 0.0500
no= 7947934, sum= -358086639, dt= 0.0400
no= 7225394, sum= -1648384773, dt= 0.0300
no= 6568540, sum= -758577738, dt= 0.0400
no= 5971400, sum= 402720004, dt= 0.0300
no= 5428545, sum= -1479669791, dt= 0.0200
no= 4935041, sum= 1085019201, dt= 0.0300
no= 4486401, sum= 790835073, dt= 0.0200
no= 4078546, sum= -2080876021, dt= 0.0200
no= 3707769, sum= 1829658965, dt= 0.0200
no= 3370699, sum= -1434172958, dt= 0.0210
no= 3064272, sum= 483722600, dt= 0.0100
no= 2785702, sum= 1713740965, dt= 0.0100
no= 2532456, sum= -1672607916, dt= 0.0200
no= 2302233, sum= 144722629, dt= 0.0100
no= 2092939, sum= -235445630, dt= 0.0100
no= 1902672, sum= 1900089512, dt= 0.0100
no= 1729702, sum= 1286750245, dt= 0.0100
no= 1572456, sum= -640859052, dt= 0.0100
no= 1429505, sum= -459229183, dt= 0.0000
no= 1299550, sum= -1692806287, dt= 0.0100
no= 1181409, sum= 2079501393, dt= 0.0000
no= 1074008, sum= 1221511372, dt= 0.0000
no= 976371, sum= -90716850, dt= 0.0100
no= 887610, sum= -1210791377, dt= 0.0000
no= 806918, sum= -858781675, dt= 0.0000
no= 733562, sum= -1525968945, dt= 0.0100
no= 666875, sum= -976833142, dt= 0.0000
no= 606250, sum= -913759353, dt= 0.0000
no= 551136, sum= 1551865456, dt= 0.0100
no= 501033, sum= 963232477, dt= 0.0000
no= 455484, sum= 653849766, dt= 0.0000
no= 414076, sum= -169671994, dt= 0.0000
no= 376433, sum= 2131613225, dt= 0.0100
no= 342212, sum= -1574844566, dt= 0.0000
no= 311102, sum= 1147742497, dt= 0.0000
no= 282820, sum= 1339011946, dt= 0.0000
no= 257109, sum= -1307090873, dt= 0.0000
no= 233735, sum= 1546338204, dt= 0.0000
no= 212486, sum= 1100419861, dt= 0.0000
no= 193169, sum= 1477358681, dt= 0.0100
no= 175609, sum= -1760520939, dt= 0.0000
no= 159644, sum= -141718698, dt= 0.0000
no= 145131, sum= 1941641554, dt= 0.0000
no= 131937, sum= 113817361, dt= 0.0000
no= 119943, sum= -1396712996, dt= 0.0000
no= 109039, sum= 1649838984, dt= 0.0000
no= 99126, sum= 618064205, dt= 0.0000
no= 90115, sum= -234565626, dt= 0.0000
no= 81922, sum= -939319293, dt= 0.0000
no= 74475, sum= -1521667246, dt= 0.0000
no= 67704, sum= -2003017636, dt= 0.0000
no= 61549, sum= 1894170475, dt= 0.0000
no= 55954, sum= 1565453035, dt= 0.0000
no= 50867, sum= 1293751278, dt= 0.0000
no= 46243, sum= 1069230646, dt= 0.0000
no= 42039, sum= 883659780, dt= 0.0000
no= 38217, sum= 730288653, dt= 0.0000
no= 34743, sum= 603555396, dt= 0.0000
no= 31584, sum= 498790320, dt= 0.0000
no= 28713, sum= 412232541, dt= 0.0100
no= 26103, sum= 340696356, dt= 0.0000
no= 23730, sum= 281568315, dt= 0.0000
no= 21572, sum= 232686378, dt= 0.0000
no= 19611, sum= 192305466, dt= 0.0000
no= 17828, sum= 158927706, dt= 0.0000
no= 16208, sum= 131357736, dt= 0.0000
no= 14734, sum= 108552745, dt= 0.0000
no= 13395, sum= 89719710, dt= 0.0000
no= 12177, sum= 74145753, dt= 0.0000
no= 11070, sum= 61277985, dt= 0.0000
no= 10063, sum= 50637016, dt= 0.0000
no= 9148, sum= 41847526, dt= 0.0000
no= 8317, sum= 34590403, dt= 0.0000
no= 7561, sum= 28588141, dt= 0.0000
no= 6873, sum= 23622501, dt= 0.0000
no= 6248, sum= 19521876, dt= 0.0000
no= 5680, sum= 16134040, dt= 0.0000
no= 5164, sum= 13336030, dt= 0.0000
no= 4694, sum= 11019165, dt= 0.0000
no= 4268, sum= 9110046, dt= 0.0000
no= 3880, sum= 7529140, dt= 0.0000
no= 3527, sum= 6221628, dt= 0.0000
no= 3206, sum= 5140821, dt= 0.0000
no= 2915, sum= 4250070, dt= 0.0000
no= 2650, sum= 3512575, dt= 0.0000
no= 2409, sum= 2902845, dt= 0.0000
no= 2190, sum= 2399145, dt= 0.0000
no= 1991, sum= 1983036, dt= 0.0000
no= 1810, sum= 1638955, dt= 0.0000
no= 1645, sum= 1353835, dt= 0.0000
no= 1495, sum= 1118260, dt= 0.0000
no= 1359, sum= 924120, dt= 0.0000
no= 1236, sum= 764466, dt= 0.0000
no= 1123, sum= 631126, dt= 0.0000
no= 1021, sum= 521731, dt= 0.0000
no= 928, sum= 431056, dt= 0.0000
no= 844, sum= 356590, dt= 0.0000
no= 767, sum= 294528, dt= 0.0000
no= 697, sum= 243253, dt= 0.0000
no= 634, sum= 201295, dt= 0.0000
no= 576, sum= 166176, dt= 0.0000
no= 524, sum= 137550, dt= 0.0000
no= 476, sum= 113526, dt= 0.0000
no= 433, sum= 93961, dt= 0.0000
no= 393, sum= 77421, dt= 0.0000
no= 358, sum= 64261, dt= 0.0000
no= 325, sum= 52975, dt= 0.0000
no= 295, sum= 43660, dt= 0.0000
no= 269, sum= 36315, dt= 0.0000
no= 244, sum= 29890, dt= 0.0000
no= 222, sum= 24753, dt= 0.0000
no= 202, sum= 20503, dt= 0.0000
no= 183, sum= 16836, dt= 0.0000
no= 167, sum= 14028, dt= 0.0000
no= 151, sum= 11476, dt= 0.0000
no= 138, sum= 9591, dt= 0.0000
no= 125, sum= 7875, dt= 0.0000
no= 114, sum= 6555, dt= 0.0000
no= 103, sum= 5356, dt= 0.0000
no= 94, sum= 4465, dt= 0.0000
no= 85, sum= 3655, dt= 0.0000
no= 77, sum= 3003, dt= 0.0000
no= 70, sum= 2485, dt= 0.0000
no= 64, sum= 2080, dt= 0.0000
no= 58, sum= 1711, dt= 0.0000
no= 53, sum= 1431, dt= 0.0000
no= 48, sum= 1176, dt= 0.0000
no= 43, sum= 946, dt= 0.0000
no= 39, sum= 780, dt= 0.0000
no= 36, sum= 666, dt= 0.0000
no= 33, sum= 561, dt= 0.0000
no= 30, sum= 465, dt= 0.0000
no= 27, sum= 378, dt= 0.0000
no= 24, sum= 300, dt= 0.0000
no= 22, sum= 253, dt= 0.0000
no= 20, sum= 210, dt= 0.0000
no= 18, sum= 171, dt= 0.0000
no= 16, sum= 136, dt= 0.0000
no= 15, sum= 120, dt= 0.0000
no= 14, sum= 105, dt= 0.0000
no= 12, sum= 78, dt= 0.0000
no= 11, sum= 66, dt= 0.0000
*** end of program! dt_min= 0.0100
Press any key to continue
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/timeb.h>
#include <time.h>
// ----------------------------------------------
#include "sj01.h"
#include "sj02.h"
// ----------------------------------------------
// get_sum(no);
int get_sum(int no)
{
int sum= 0;
for (int i=1;i<=no;i++) {
sum+= i;
}
return(sum);
}// end of get_sum()
// ----------------------------------------------
void main()
{
int no, sum, t1;
double x1= 20e8, dt, dt_min= 999;
// ----------------------------------------------
skip(3);
no= (int) x1;
while (no > 10) {
time1(&t1);
sum= get_sum(no);
time2(t1, &dt);
// ----------------------------------------------
printf("no= %12ld, sum= %12ld, dt= %10.4lf\n",
no, sum, dt);
if (dt > 0) {
// dt_min must <= any dt
if (dt_min > dt) {
dt_min= dt;
}
}
x1/= 1.1;
no= (int) x1;
}
skip(1);
printf("*** end of program! dt_min= %10.4lf\n", dt_min);
}// end of main()
发表评论
- 浏览: 43093 次
- 性别:

- 来自: 台灣省 台北市

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
計算時間的副程式
以下程式,可以證明 最小的時間間隔是 10 ms // file: psc ...
-- by sjgau -
兩個常用的副程式:skip() ...
以下為 時間測量的輸出 // file: psc51.cpp // fo ...
-- by sjgau -
兩個常用的副程式:skip() ...
將自己寫的副程式放到外面的檔案, 分開編譯 #include <s ...
-- by sjgau -
未卜先知-計算機模擬 Com ...
我的習慣是:從頭開始。 所以,有興趣入門的朋友,可以跟著學到一些東西。 我使用的 ...
-- by sjgau -
我想要做的事情
so you need another 3 years to come back ...
-- by jsjw2






评论排行榜