double/float в строку
От: maks1180  
Дата: 12.11.22 07:39
Оценка:
Есть ли стандартные функции преобразования double/float в строку ?
Что-бы они были как минимум на gcc (на разных ОС) и на VS (Windows).
Желательно на "C", т.е. именно функция, а не методы классов.
sprintf — не предлагать!
Я нашёл fcvt и gcvt — можно ли на них пологаться или это не стандарт ?
Если нет в стандарте этих функций, насколько большая их реализация, где её можно посмотреть ?
===============================================
(реклама, удалена модератором)
Отредактировано 12.11.2022 7:40 maks1180 . Предыдущая версия .
Re: double/float в строку
От: LaptevVV Россия  
Дата: 12.11.22 09:13
Оценка:
Стандартная to_string()
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: double/float в строку
От: LaptevVV Россия  
Дата: 12.11.22 09:15
Оценка: 8 (2) -1
Новичок, что ли?
Смотри https://en.cppreference.com/w/
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Нет, чтобы поблагодарить
От: LaptevVV Россия  
Дата: 12.11.22 10:04
Оценка:
Так он еще минусы ставит...
Очевидно, новичок...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: double/float в строку
От: Sm0ke Россия ksi
Дата: 13.11.22 11:02
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Есть ли стандартные функции преобразования double/float в строку ?

M>Что-бы они были как минимум на gcc (на разных ОС) и на VS (Windows).
M>Желательно на "C", т.е. именно функция, а не методы классов.
M>sprintf — не предлагать!
M>Я нашёл fcvt и gcvt — можно ли на них пологаться или это не стандарт ?
M>Если нет в стандарте этих функций, насколько большая их реализация, где её можно посмотреть ?


Можно через string_stream
https://en.cppreference.com/w/cpp/io/basic_stringstream/basic_stringstream

Или через to_string (не у всех компиляторов, или уже у всех хз надо версию смотреть)
https://en.cppreference.com/w/cpp/string/basic_string/to_string

Или через to_chars
https://en.cppreference.com/w/cpp/utility/to_chars
Re[2]: double/float в строку
От: maks1180  
Дата: 13.11.22 11:07
Оценка:
S>Можно через string_stream
S>https://en.cppreference.com/w/cpp/io/basic_stringstream/basic_stringstream

S>Или через to_string (не у всех компиляторов, или уже у всех хз надо версию смотреть)

S>https://en.cppreference.com/w/cpp/string/basic_string/to_string

S>Или через to_chars

S> https://en.cppreference.com/w/cpp/utility/to_chars

У них даже нельзя указать точность после запятой и нельзя вывести в формате 1.23e+10
===============================================
(реклама, удалена модератором)
Re[3]: double/float в строку
От: vopl Россия  
Дата: 13.11.22 13:07
Оценка: 4 (1)
Здравствуйте, maks1180, Вы писали:

S>>Можно через string_stream

S>>https://en.cppreference.com/w/cpp/io/basic_stringstream/basic_stringstream

S>>Или через to_string (не у всех компиляторов, или уже у всех хз надо версию смотреть)

S>>https://en.cppreference.com/w/cpp/string/basic_string/to_string

S>>Или через to_chars

S>> https://en.cppreference.com/w/cpp/utility/to_chars

M>У них даже нельзя указать точность после запятой и нельзя вывести в формате 1.23e+10


Не правильно говоришь. Надо так:
А нельзя ли у них указать точность после запятой и вывести в формате 1.23e+10?

Тогда получишь примерно такой ответ:
Можно, смотри внимательней какие перегрузки есть у to_chars, одна из них способна делать то что нужно.
Re: double/float в строку
От: cppguard  
Дата: 13.11.22 13:09
Оценка:
Здравствуйте, maks1180, Вы писали:

M>sprintf — не предлагать!


Тогда изволь подробнее расписать требования. О то звучит как "хочу пить, воду не предлагать". Кстати, я не уверен, что существует что-то лучше snprintf в стандартной библиотеке.
Re[2]: double/float в строку
От: Zhendos  
Дата: 13.11.22 15:00
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Кстати, я не уверен, что существует что-то лучше snprintf в стандартной библиотеке.


Так вроде все современные функции лучше чем snprintf
за счет того что не зависят от текущей локали.
За счет этого потенциально "std::to_chars" может быстрее
работать, да и надежность повышается, так как поведение программы не меняется
из-за переменной окружения типа LC_ALL.
Re[2]: double/float в строку
От: maks1180  
Дата: 13.11.22 17:20
Оценка: :)
C>Тогда изволь подробнее расписать требования. О то звучит как "хочу пить, воду не предлагать". Кстати, я не уверен, что существует что-то лучше snprintf в стандартной библиотеке.

пишу свою реализацию sprintf, поэтому её не предлагать
===============================================
(реклама, удалена модератором)
Re[3]: double/float в строку
От: wl. Россия  
Дата: 13.11.22 19:35
Оценка:
Здравствуйте, maks1180, Вы писали:

M>пишу свою реализацию sprintf, поэтому её не предлагать


а зачем велосипедить? на гитхабе уже есть велосипеды.
Вот пример из проекта Vita3k
https://github.com/Vita3K/printf/blob/99f2ec5426cf7113a4879048cd772657c84865e3/v3kprintf.h#L257
Re[4]: double/float в строку
От: maks1180  
Дата: 13.11.22 22:20
Оценка:
M>>пишу свою реализацию sprintf, поэтому её не предлагать

wl.>а зачем велосипедить? на гитхабе уже есть велосипеды.

wl.>Вот пример из проекта Vita3k
wl.>https://github.com/Vita3K/printf/blob/99f2ec5426cf7113a4879048cd772657c84865e3/v3kprintf.h#L257

Они используют функцию _ftoa, которую сами определили.
Каждому же хочеться под себя велосипед, а не чужой! В другой ветки я писал причины почему стандартный sprintf не подходит.
===============================================
(реклама, удалена модератором)
Re[3]: double/float в строку
От: cppguard  
Дата: 14.11.22 01:55
Оценка:
Здравствуйте, 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 — медленно, мы сейчас напишем быстрее!" заканчивается тупыми ошибками, позволяющими переполнять стек или перезаписывать память. И судя по тому, как автор оформил свой вопрос, он таки пытается сэкономить на спичках и стать очередным стрелком в ногу.
Re[4]: double/float в строку
От: B0FEE664  
Дата: 14.11.22 11:02
Оценка:
Здравствуйте, cppguard, Вы писали:

C>То есть как бы не эквиваленты, а разные инструменты. Но да, за счёт урезания возможностей получается быстрее. Не хочу казаться ворчащим стариком, но 99% попыток "sprintf — медленно, мы сейчас напишем быстрее!" заканчивается тупыми ошибками, позволяющими переполнять стек или перезаписывать память. И судя по тому, как автор оформил свой вопрос, он таки пытается сэкономить на спичках и стать очередным стрелком в ногу.


Автор пишет свой sprintf
Автор: maks1180
Дата: 01.11.22
.
Есть такие программисты, что оптимизируют стандартные алгоритмы (просто потому, что могут).
Знаю одного такого. Тот не остановился, пока не написал самый быстрый (без кавычек) перевод чисел в строки, но для этого ему пришлось делать оптимизацию под каждую разновидность процессора.
Потом пытался (безуспешно) продать свой код.
Интересно каких глубин на этом поприще достигнет maks1180.
И каждый день — без права на ошибку...
Re[3]: double/float в строку
От: кт  
Дата: 14.11.22 11:23
Оценка:
Здравствуйте, maks1180, Вы писали:

M>пишу свою реализацию sprintf, поэтому её не предлагать


Тогда начните с самого низу ))
Re[4]: double/float в строку
От: Sm0ke Россия ksi
Дата: 17.11.22 20:41
Оценка:
Здравствуйте, wl., Вы писали:

wl.>Здравствуйте, maks1180, Вы писали:


M>>пишу свою реализацию sprintf, поэтому её не предлагать


wl.>а зачем велосипедить? на гитхабе уже есть велосипеды.

wl.>Вот пример из проекта Vita3k
wl.>https://github.com/Vita3K/printf/blob/99f2ec5426cf7113a4879048cd772657c84865e3/v3kprintf.h#L257

Как у них дела с inf и nan?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.