的fputs与fprintf中,双(fputs vs. fprintf and double)

2019-09-26 04:32发布

我需要拿出一个双值转换成文件。 因此,对于我的所有其他字符串我必须拿出我使用的fputs,因为我想和定时认为的fputs更快然后fprintf中。

但是如果我想扑灭的双重价值,我不能用的fputs做到这一点,所以我试图fprintf中。 这是非常缓慢的。 我需要更多的时间,如果我更换fprintf中,提出有一个的fputs(“TEST”,文件);

我怎样才能把出双快的字符串。 需要我首先将它转换为字符串?

我发现了一些转换。 但是,如果使用他们我,如果我使用fprintf中一样慢。

所以,我怎么能拿出双成文件,快,如果我把一个字符串的文件?

  fputs("TEST",fileout); //FAST
  fprintf(fileout, "%f",p); //SLOW

编辑:

与双fprintf中时报:

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);

时间之间的变化只是我把双,而不是测试字符串文件中的变化。

Answer 1:

转换浮点数为十进制表示是从根本上缓慢的操作。 您可以尝试使用%a符代替%f将其保存为十六进制浮动; 这应该是更快,会安全地保留原始值,而不是一个贫穷的逼近。 如果你需要小数,你应该使用%.21g或相似的,不%f ,因为后者将失去大部分的精度。

如果没有这对你不够快,那么你可能需要直接保存值的二进制表示。



文章来源: fputs vs. fprintf and double