double 値をファイルに出力する必要があります。したがって、出力する必要がある他のすべての文字列については、fputs を使用します。これは、fputs が fprintf よりも高速であると考え、タイミングを合わせたためです。
しかし、double 値を出力したい場合、fputs ではこれを行うことができないので、fprintf を試しました。これは非常に遅いです。fprintf を置き換えてそこに fputs("TEST",file); を配置すると、さらに時間が必要になります。
文字列と同じくらい速くダブルを出すにはどうすればよいですか。最初に文字列に変換する必要がありますか?
私はいくつかの変換を見つけました。しかし、それらを使用すると、fprintf を使用する場合と同じくらい遅くなります。
では、ファイルに文字列を出力するのと同じように、ダブルをファイルに出力するにはどうすればよいでしょうか?
fputs("TEST",fileout); //FAST
fprintf(fileout, "%f",p); //SLOW
編集:
fprintf double の時間:
END.PROCESSING.DATA: 2013-04-26 08:10:33.000
END.CALC.IN.FILE: 2013-04-26 08:11:13.000
fputs 文字列の時間:
END.PROCESSING.DATA: 2013-04-26 08:14:10.000
END.CALC.IN.FILE: 2013-04-26 08:14:37.000
その時のコード:
now = time (0);
strftime (buff, 100, "%Y-%m-%d %H:%M:%S.000", localtime (&now));
printf ("END.PROCESSING.DATA: %s\n", buff);
//output file
FILE *fileout;
fileout = fopen("out.txt","w");
double p;
for(i=0; i<17000;i++){
for(j=0; j<i;j++){
for(z=0;z<400;z++){
//DO SOME WORK
}
p = 1.0;
fputs(allsubsts[i],fileout);
fputs(";",fileout);
fputs(allsubsts[j],fileout);
fputs(";",fileout);
//fprintf(fileout, "%.21g", p);
fputs("TEST",fileout);
fputs(";\n",fileout);
}
}
fclose(fileout);
now = time(0);
strftime(buff,100,"%Y-%m-%d %H:%M:%S.000", localtime(&now));
printf("END.CALC.IN.FILE: %s\n",buff);
その間の変更は、ファイルに TEST 文字列の代わりに double を入れた変更のみです。