MacOS 8.6上CodeWarrior(IDE4.0.4)を用いて作成したC言語によるプログラムがあり
ます。MacからLinuxマシン(VineLinux PPC 2.5)にそのソースをもってきましてgccにて
コンパイルしましたところ、プログラム実行中での計測時間が狂います。具体的にはモ
ニタ上に表示される時間が減少したりします(他の症状もあるかもしれませんが)。
おおかた型を誤っているのだろうと思ったのですが、いまのところ自分では気づけま
せん。また、Mac上で走らせているぶんにはなんの異常もなさそうです。下に時間計測
に関わる部分のみをソースから抜粋してのせておきます。お気づきの点がありましたら
アドバイスをお願いします。
typedef unsigned long int time_passed;
void Read_tmp(
const char *filename,
const char *mode,
int *pmax_series_set,
int *pn_series_set,
set **pseries_set,
int *pmax_series_record,
int *pn_series_record,
int *poptimizesgl,
record **pseries_record,
int *pi_series_record,
set *pnd_set,
int *pstepmin,
double *pratiomin,
double *pep,
int *pstepsgl,
int *pstep,
time_passed *ppass0
);
void Read_tmp(
const char *filename,
const char *mode,
int *pmax_series_set,
int *pn_series_set,
set **pseries_set,
int *pmax_series_record,
int *pn_series_record,
int *poptimizesgl,
record **pseries_record,
int *pi_series_record,
set *pnd_set,
int *pstepmin,
double *pratiomin,
double *pep,
int *pstepsgl,
int *pstep,
time_passed *ppass0
)
{
(中略)
if(NULL == fgets(buf, sizeof(buf), fp)) exit(1); /*ppass0の読み込み*/
if(sscanf(buf, "passed time /sec = %lu", ppass0 < 1
fprintf(stderr, "can't read pass0 ! \n"), exit(1);
printf("pass0 = %12u\n", *ppass0);
(中略)
}
int main(
{
(中略)
/*各初期値を得る.*/
if('y' == icon {/*tmpファイル, tmp.CDsearch130_bからの読み込み.*/
Read_tmp(
"tmp.CDsearch130_b",
"rb",
&max_series_set,
&n_series_set,
&series_set,
&max_series_record,
&n_series_record,
&optimizesgl,
&series_record,
&i_series_record,
&ndp_set, /*読み捨て*/
&stepmin,
&ratiomin,
&ep,
&stepsgl,
&step,
&pass0
);
else{/*初期値設定*/
(中略)
pass0 = 0;
}
t0 = t1 = clock(); pass = (t1-t0) / CLOCKS_PER_SEC + pass0; /*時間計測開
始*/
for(; ;){
if(optimizesgl == 0) {
for(; ;) {
for(; ;) {
(中略)
for(; ;) {
/*時間計測*/
t1 = clock(); pass = (t1-t0) / CLOCKS_PER_SEC +pass0;
printf("\n"); printf("passed time = %12u sec\n", pass
); printf("\n");
(中略)
}
}
}
}
if(optimizesgl == 1) {
for(; ;) {
(中略)
/*時間計測*/
t1 = clock(); pass = (t1-t0) / CLOCKS_PER_SEC +pass0;
printf("\n"); printf("passed time = %12u sec\n", pass); prin
tf("\n");
}
}
(中略)
/*時間計測*/
t1 = clock(); pass = (t1-t0) / CLOCKS_PER_SEC +pass0;
printf("\n"); printf("passed time = %12u sec\n", pass); printf("\n")
;
(中略)
} /*計算全体を終了*/
return 0;
}
田中 元 BYH01337@xxxxxxxxxxx