gpt4 book ai didi

c - fputs 与 fprintf 和 double

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:55 24 4
gpt4 key购买 nike

我需要将 double 值放入文件中。所以对于我所有的其他字符串,我必须使用 fputs 输出,因为我认为 fputs 比 fprintf 更快。

但是如果我想输出 double 值,我不能用 fputs 做到这一点,所以我尝试了 fprintf。这很慢。如果我更换 fprintf 并在其中放置一个 fputs("TEST",file);

,我需要更多时间

我怎样才能像字符串一样快地输出双倍数。我需要先将它转换为字符串吗?

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

那么我怎样才能像向文件中放入字符串一样快速地将 double 值放入文件中呢?

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

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

最佳答案

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

如果这些对您来说都不够快,那么您可能需要直接保存值的二进制表示。

关于c - fputs 与 fprintf 和 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com