LINUX.ORG.RU

float to string на эмбедах, без sprintf, как?

 , ,


0

3

Посоветуйте, чем можно обычный float перегнать в строку, с заданной точностью? А то по всяким stackoverflow какие-то васянские снипеты и мутные самоделки с непонятными лицензиями. Сейчас юзаю sprintf, но он помимо жирности кастует float в double, что вызывает дополнтельное распухание зависимостей.

Мне не надо наворотов sprintf, хватило бы просто «распечатать с XX знаками после запятой», можно даже без отрицательных значений. Может есть какие-то известные библиотеки, от которых эмбед не треснет?

PS. Закопипастить 30 строк кода всегда успеется. Сначала хочу попробовать найти и заюзать библиотеку.

★★★★★

Сначала хочу попробовать найти и заюзать библиотеку.

Что там юзать? Сперва отсекаешь целое, потом берешь остаток, записываешь его в char* и делишь это целое в цикле на 10, пока не кончится. Дробную часть умножаешь на 10, пока не надоест, записывая целое в char*.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Мне в эмбедах не нравится, что каждый городит помойку собственных лисапедов. Скопипастить код не проблема, но хочется «красиво» - подключить зависимость в platformio или заюзать что-то готовое из стандартного.

Vit ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Это лишний раз доказывает, что флоат в имбеде нинужно!

shkolnick-kun ★★★★★
()
Ответ на: комментарий от Vit

У тебя неправильные представления об этом всем.

Быстрее велосипед написать, чем заниматься поиском всякого нинужно на гитхабах

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от anonymous

О, в ETL что-то есть на эту тему.

Vit ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Что там юзать? Сперва отсекаешь целое, потом берешь остаток, записываешь его в char* и делишь это целое в цикле на 10, пока не кончится. Дробную часть умножаешь на 10, пока не надоест, записывая целое в char*.

после взятия целого и остатка всё прочее лишнее. выводишь их как 16-тиричные, что почти моментально.. и получаешь результат аналогичный printf(«%a»,x) ..

может непривычно, но на то и эмбед. Зато кстати точность не теряется

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Если ему так нужны флоаты, то, почему не сделать:

а) отдельно хранимые целое и дробное (как целое) и нужные функции по умножению, делению, сложению, вычитанию, выводу

б) условится, что целое меньше N разрядов (до нужной точности) — это дробная часть

?

deep-purple ★★★★★
()

не то чтобы у меня дикий опыт в эмбедах, но он весь говорит что float на эмбедах это ошибка архитектуры. Замени float и уйдёт эта и куча другого не нужного хлама.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Ага, заодно еще посоветуй интерфейс превратить в кусок говна, как это принято на эмбедах. Потому что красивый интерфейс - это нарушение традиций.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

но ведь дело говорит. эмбеды обычно начинаются с определения числа значящих цифр, дальше сам догадаешся? хотя я выше уже питонячью обстракцию тебе кинул на подумать, видимо ты опять уперся

хм, не ну если ты только не калькулятор там пилишь (:

Morin ★★★★
()
Последнее исправление: Morin (всего исправлений: 1)
Ответ на: комментарий от Morin

Нету там ни какого дела. Мог бы проект открыть, и посмотреть что там где я использую плавучку, кроилово нафик не уперлось. В интерфейсе важнее чтобы клепать быстро и менять легко.

А великие экономисты обычно лепят говнарские интерфейсы и просто не в состоянии представить, что иногда надо решать задачи поважнее экономии битов и тактов.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

ты сам наверху страдал по даблу, ну нельзя быть таким непоследовательным (: теперь оказывается ресурсы неважны

Morin ★★★★
()

Есть, бери.

Могу посоветовать свой вариант d2a(), с тестом корректности и отдельным benchmark-ом.

По текущей информации это самая быстрая, компактная и корректная реализация d2a по мотивам алгоритма grisu. Ryu (пока) обгоняет её только потому, что я всегда генерирую полную строку (мне так надо было).

В бенчмарке собраны примерно все релевантные реализации d2a, поэтому можно посмотреть на альтернативы.

Функция d2a() преобразует double в корректную строку минимальной длины вида -22250738585072014e-324, так чтобы обратное преобразование в double всегда дает исходное значение (но при этом, последняя цифра может быть +/-1 от оптимально близкой). Эту строку дальше можно легко превратить в желаемый формат.

Минусы: только double, код на C++, «сырой» формат результата (ничего лишнего, даже без \0 на конце).

Deleted
()
Ответ на: комментарий от Morin

Не важны. Но мне не нравятся варнинги компилятора и есть желание поразбираться, как на сях лепить эмбеды дешево и сердито.

В общем я все динамические строки на ETL перевел. Годная штука.

Vit ★★★★★
() автор топика
Ответ на: Есть, бери. от Deleted

Спасибо. Я пока это заюзал https://www.etlcpp.com/to_string.html. Заодно будет повод в sdl поразбираться, сто лет уже на сях и плюсах не кодил.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Ага, заодно еще посоветуй интерфейс превратить в кусок говна

«чую теоретика развитого социализма». ты бы с первых строк сказал, что твоё поделие «сферическое в вакууме», а то тебе помочь пытались исходя из опыта, а нужно исходить из красивых и не имеющих отношения к реальности картинок.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Зачем мне про себя что-то придумывать? Ссылку уже сто раз давал, видимо кроме тебя в танке больше никого не осталось. И таки да, совершенно не обязательно «пытаться мне помогать» по тем вопросам, где я совета не спрашивал.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Morin

мда, походу в модераторы набрали полотеров, снесли все до кучи (:

Полотеры с синдромом вахтера? Горючая смесь!

anonymous
()
Ответ на: комментарий от Morin

Без советов Эдика я переживу. Причем даже лучше чем с ними. Жалко что он сам это не хочет понимать.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Он безвредный алкач, иногда буянит, но с него бывает толк

За последние несколько лет, что-то узнал с лора, всего от пары человек, персонаж один из них.

Увы лор много лет как, лор не является местом для решения проблем ни новичков, ни старожилов мира линукс

anonymous
()
Ответ на: комментарий от anonymous

За последние несколько лет, что-то узнал с лора, всего от пары человек, персонаж один из них.

Аналогично.

P.S. Я не Эдик.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.