Есть ли стандартные функции преобразования double/float в строку ?
Что-бы они были как минимум на gcc (на разных ОС) и на VS (Windows).
Желательно на "C", т.е. именно функция, а не методы классов.
sprintf — не предлагать!
Я нашёл fcvt и gcvt — можно ли на них пологаться или это не стандарт ?
Если нет в стандарте этих функций, насколько большая их реализация, где её можно посмотреть ?
Здравствуйте, maks1180, Вы писали:
M>Есть ли стандартные функции преобразования double/float в строку ? M>Что-бы они были как минимум на gcc (на разных ОС) и на VS (Windows). M>Желательно на "C", т.е. именно функция, а не методы классов. M>sprintf — не предлагать! M>Я нашёл fcvt и gcvt — можно ли на них пологаться или это не стандарт ? M>Если нет в стандарте этих функций, насколько большая их реализация, где её можно посмотреть ?
Здравствуйте, maks1180, Вы писали:
M>sprintf — не предлагать!
Тогда изволь подробнее расписать требования. О то звучит как "хочу пить, воду не предлагать". Кстати, я не уверен, что существует что-то лучше snprintf в стандартной библиотеке.
Здравствуйте, cppguard, Вы писали:
C>Кстати, я не уверен, что существует что-то лучше snprintf в стандартной библиотеке.
Так вроде все современные функции лучше чем snprintf
за счет того что не зависят от текущей локали.
За счет этого потенциально "std::to_chars" может быстрее
работать, да и надежность повышается, так как поведение программы не меняется
из-за переменной окружения типа LC_ALL.
C>Тогда изволь подробнее расписать требования. О то звучит как "хочу пить, воду не предлагать". Кстати, я не уверен, что существует что-то лучше snprintf в стандартной библиотеке.
пишу свою реализацию sprintf, поэтому её не предлагать
Они используют функцию _ftoa, которую сами определили.
Каждому же хочеться под себя велосипед, а не чужой! В другой ветки я писал причины почему стандартный sprintf не подходит.
Здравствуйте, Zhendos, Вы писали:
Z>Так вроде все современные функции лучше чем snprintf Z>за счет того что не зависят от текущей локали. Z>За счет этого потенциально "std::to_chars" может быстрее Z>работать, да и надежность повышается, так как поведение программы не меняется Z>из-за переменной окружения типа LC_ALL.
Only a small subset of formatting policies used by other libraries (such as std::sprintf) is provided. This is intended to allow the fastest possible implementation that is useful in common high-throughput contexts such as text-based interchange (JSON or XML).
То есть как бы не эквиваленты, а разные инструменты. Но да, за счёт урезания возможностей получается быстрее. Не хочу казаться ворчащим стариком, но 99% попыток "sprintf — медленно, мы сейчас напишем быстрее!" заканчивается тупыми ошибками, позволяющими переполнять стек или перезаписывать память. И судя по тому, как автор оформил свой вопрос, он таки пытается сэкономить на спичках и стать очередным стрелком в ногу.
Здравствуйте, cppguard, Вы писали:
C>То есть как бы не эквиваленты, а разные инструменты. Но да, за счёт урезания возможностей получается быстрее. Не хочу казаться ворчащим стариком, но 99% попыток "sprintf — медленно, мы сейчас напишем быстрее!" заканчивается тупыми ошибками, позволяющими переполнять стек или перезаписывать память. И судя по тому, как автор оформил свой вопрос, он таки пытается сэкономить на спичках и стать очередным стрелком в ногу.
.
Есть такие программисты, что оптимизируют стандартные алгоритмы (просто потому, что могут).
Знаю одного такого. Тот не остановился, пока не написал самый быстрый (без кавычек) перевод чисел в строки, но для этого ему пришлось делать оптимизацию под каждую разновидность процессора.
Потом пытался (безуспешно) продать свой код.
Интересно каких глубин на этом поприще достигнет maks1180.