首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fputs与fprintf和double

fputs与fprintf和double
EN

Stack Overflow用户
提问于 2013-04-25 23:18:22
回答 1查看 3.3K关注 0票数 1

我需要在文件中放入一个双精度值。所以对于我必须输出的所有其他字符串,我使用fput,因为我认为和计时,fput比fprintf更快。

但是如果我想要输出双精度值,我不能用fput来实现,所以我尝试了fprintf。这是非常慢的。如果我替换fprintf并放入一个fput(“TEST”,文件),我需要更多的时间;

我怎样才能把替身放得和绳子一样快呢?我需要先把它转换成字符串吗?

我发现了一些转变。但是如果我使用它们,我的速度就像使用fprintf一样慢。

那么,我如何才能像向文件输出字符串一样快速地将双精度值输出到文件中呢?

代码语言:javascript
复制
  fputs("TEST",fileout); //FAST
  fprintf(fileout, "%f",p); //SLOW

编辑:

使用fprintf double的次数:

代码语言:javascript
复制
END.PROCESSING.DATA: 2013-04-26 08:10:33.000
END.CALC.IN.FILE: 2013-04-26 08:11:13.000

使用fput字符串的时间:

代码语言:javascript
复制
END.PROCESSING.DATA: 2013-04-26 08:14:10.000
END.CALC.IN.FILE: 2013-04-26 08:14:37.000

那段时间的代码:

代码语言:javascript
复制
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);

这段时间之间的变化只是我在文件中放入双精度值而不是测试字符串的变化。

EN

回答 1

Stack Overflow用户

发布于 2013-04-25 23:22:53

将浮点数转换为十进制表示从根本上来说是一种很慢的操作。您可以尝试使用%a说明符而不是%f将其存储为十六进制浮点数;这应该会快得多,并且可以安全地保留原始值,而不是较差的近似值。如果你需要小数,你应该使用%.21g或类似的,而不是%f,因为后者会失去大部分的精度。

如果这些操作都不够快,那么您可能需要直接保存该值的二进制表示形式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16218614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档