Конвертировать double в строку в научной нотации быстрее, чем sprintf в c ++

0

Как название, как преобразовать double в строку в научной нотации быстрее, чем sprintf в c++?

У меня много (около 1e10) двойных чисел, и вам нужно преобразовать все в строку в этом формате: ± *. ********* E ± ***, который имеет 10 значащих цифр.

Но sprintf и stringstream слишком медленны, есть ли более быстрый способ?

Благодарю.

  • 0
    Вы пытались сравнить скорость, если strintf со скоростью sstream с выходными манипуляторами? Я полагаю, sprintf быстрее :-)
  • 0
    Конечно sprintf быстрее, чем stringstream , но я хочу быстрее, чем sprintf .
Показать ещё 10 комментариев
Теги:
string
number-formatting
double
scientific-notation

2 ответа

1

Преобразование, о котором вы просите, не является простой операцией. Вы можете посмотреть, как реализовать "char * ftoa (float num)" без функции библиотеки sprintf() в C, C++ и JAVA? быть уверенным.

Я не уверен, что вы найдете реализацию, которая будет быстрее, чем sprintf, потому что она находится в стандартной библиотеке C на время и уже может быть оптимизирована.

Лучшее, что вы можете сделать, это:

  • получить источник из стандартной библиотеки C
  • проанализировать, как выполняется преобразование
  • сравните с ссылками, найденными в указанном выше вопросе
  • сравнить различные реализации

Я понимаю, что это скорее намек, чем полный ответ, но он слишком длинный для комментария и лучшего, что я могу сделать

  • 0
    Но я не смог найти ни одной существующей реализации sprintf. После _cfltcvt_l в код я получил функцию _cfltcvt_l , но в Windows нет исходного кода _cfltcvt_l ; в Linux я получил __mingw_vsprintf , то же самое, без исходного кода.
1

Использование boost - выход

std::string str = boost::lexical_cast<std::string>(dbl);

Обычный подход:

std::ostringstream strs;
strs << dbl;
std::string str = strs.str();

Вы должны использовать sprintf() поскольку он является самым быстрым.

Время выполнения различных функций @http://zverovich.net/2013/09/07/integer-to-string-conversion-in-cplusplus.html

Ссылки: http://www.codeproject.com/questions/166322/converting-number-from-long-double-to-string

Нужна дополнительная помощь? Дай мне знать

  • 0
    boost быстрее, чем sprintf ? И я хочу, чтобы моя строка в этом формате: ± *. ********* E ± ***, которая имеет 10 значащих цифр, как я могу это сделать?
  • 0
    есть хорошая статья о производительности здесь zverovich.net/2013/09/07/… , sprintf быстрее
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню