Как название, как преобразовать double в строку в научной нотации быстрее, чем sprintf
в c++?
У меня много (около 1e10) двойных чисел, и вам нужно преобразовать все в строку в этом формате: ± *. ********* E ± ***, который имеет 10 значащих цифр.
Но sprintf
и stringstream
слишком медленны, есть ли более быстрый способ?
Благодарю.
Преобразование, о котором вы просите, не является простой операцией. Вы можете посмотреть, как реализовать "char * ftoa (float num)" без функции библиотеки sprintf() в C, C++ и JAVA? быть уверенным.
Я не уверен, что вы найдете реализацию, которая будет быстрее, чем sprintf, потому что она находится в стандартной библиотеке C на время и уже может быть оптимизирована.
Лучшее, что вы можете сделать, это:
Я понимаю, что это скорее намек, чем полный ответ, но он слишком длинный для комментария и лучшего, что я могу сделать
_cfltcvt_l
в код я получил функцию _cfltcvt_l
, но в Windows нет исходного кода _cfltcvt_l
; в Linux я получил __mingw_vsprintf
, то же самое, без исходного кода.
Использование 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
Нужна дополнительная помощь? Дай мне знать
boost
быстрее, чем sprintf
? И я хочу, чтобы моя строка в этом формате: ± *. ********* E ± ***, которая имеет 10 значащих цифр, как я могу это сделать?
sprintf
быстрее, чемstringstream
, но я хочу быстрее, чемsprintf
.