целые числа - которые разбивают abs (INT32_MIN).

ли кто-нибудь побить производительность моего целого числа в код std :: string, связанный ниже?

Уже есть несколько вопросов, которые объясняют, как преобразовать целое число вstd::string в C ++, напримерэтот, но ни одно из предложенных решений не является эффективным.

Вот готовый к компиляции код для некоторых распространенных методов, чтобы конкурировать с:

«C ++ way», используя stringstream:http://ideone.com/jh3Sasprintf, который SO-пользователи обычно рекомендуют для повышения производительности:http://ideone.com/82kwR

Вопрекираспространенное мнение, boost::lexical_cast имеет свою реализацию (белая бумага) и не используетstringstream и числовые операторы вставки. Я бы очень хотел увидеть сравнение его производительности, потому чтоэтот другой вопрос говорит о том, что это жалко.

И мой собственный вклад, который является конкурентоспособным на настольных компьютерах и демонстрирует подход, который работает на полной скорости и во встроенных системах, в отличие от alg, в зависимости от целого числа по модулю:

Алгоритмы Бена:http://ideone.com/SsEUW

Если вы хотите использовать этот код, я сделаю его доступным по упрощенной лицензии BSD (разрешено коммерческое использование, требуется указание авторства). Просто спроси.

Наконец, функцияltoa нестандартно, но широко доступно.

Версия ltoa для тех, у кого есть компилятор, который ее предоставляет (ideone не предоставляет):http://ideone.com/T5Wim

В скором времени я опубликую результаты измерений.

Правила для алгоритмовУкажите код для преобразования не менее 32-разрядных целых чисел со знаком и без знака в десятичное число.Производить вывод в видеstd::string.Нет трюков, которые несовместимы с потоками и сигналами (например, статические буферы).Вы можете принять набор символов ASCII.Не забудьте проверить свой код наINT_MIN на машине дополнения до двух, где абсолютное значение не представимо.В идеале вывод должен быть посимвольным, идентичным канонической версии C ++ с использованиемstringstream, http://ideone.com/jh3Sa, но все, что понятно как правильное число, тоже подойдет.NEW: Несмотря на то, что вы можете использовать любые параметры компилятора и оптимизатора (кроме полностью отключенных), которые вы хотите для сравнения, код должен также компилироваться и давать правильные результаты по крайней мере для VC ++ 2010 и g ++.Надеюсь на обсуждение

Помимо более совершенных алгоритмов, я также хотел бы получить некоторые тесты для нескольких различных платформ и компиляторов (давайте используем пропускную способность МБ / с в качестве нашей стандартной единицы измерения). Я считаю, что код для моего алгоритма (я знаюsprintf Бенчмарк использует несколько ярлыков (теперь исправлено) - это стандартное поведение, определенное стандартом, по крайней мере, в предположении ASCII, но если вы видите какое-либо неопределенное поведение или входные данные, для которых выходные данные недопустимы, укажите это.

Выводы:

Различные алгоритмы работают для g ++ и VC2010, вероятно, из-за различных реализацийstd::string на каждой. VC2010 явно лучше работает с NRVO, избавляясь от возврата по стоимости, помогая только в gcc.

Код был найден, что превосходитsprintf на порядок.ostringstream отстает в 50 и более раз.

Победитель конкурса - user434507, который создает код, который выполняет 350% моей скорости на gcc. Дальнейшие записи закрыты из-за капризов сообщества SO.

Действующие (финальные?) Чемпионы скорости:

Для gcc: user434507, в 8 раз быстрее, чемsprintf: http://ideone.com/0uhhXДля Visual C ++: Тимо, в 15 раз быстрее, чемsprintf: http://ideone.com/VpKO3

Ответы на вопрос(12)

Ваш ответ на вопрос