fputs vs. fprintf и double

Мне нужно выложить двойное значение в файл. Таким образом, для всей моей другой строки, которую я должен выложить, я использую fputs, потому что я думаю и рассчитал, что fputs быстрее, чем fprintf.

Но если я хочу вывести двойное значение, я не могу сделать это с помощью 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.

1 ответ

Преобразование числа с плавающей запятой в десятичное представление является принципиально медленной операцией. Вы можете попробовать использовать %a спецификатор вместо %f хранить его как шестнадцатеричный код; это должно быть намного быстрее и безопасно сохранить исходное значение, а не плохое приближение. Если вам нужно десятичное число, вы должны использовать %.21g или похожий, не %f, так как последний потеряет большую часть точности.

Если ничего из этого не достаточно быстро для вас, то вам, вероятно, нужно сохранить двоичное представление значения напрямую.

Другие вопросы по тегам