2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Ваш вариант функции ftoa()
Сообщение12.12.2005, 19:28 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Как-то раз пришлось мне эту функцию ручками реализовывать.... Надо было писать прогу для контроллера, которая помимо прочего должна выводить число с плав. точкой на жидкокристаллический индикатор. К контроллеру прилагался компилятор C и довольно бедная библиотека, в каковой указанная функция отсутствовала.

Функция int ftoa(double x, char *str, int buflen) должна преобразовывать число x в строку и помещать результат в буфер str, причем если все знаки числа, стоящие перед десятичной точкой в обычном формате (т.е (-)ddddd.dddd) не помещаются в буфер , его надо представить в виде (-)d.dddE(+/-)dd и в таком виде поместить в буфер. Ежели и в таком виде не поместится - надо вернуть код ошибки (к примеру, если усе получилось - возвращаем 0, иначе - код ошибки). Еще одно условие - при преобразовании желательно не использовать операции с плавающей точкой - умножение, деление и т.п.

Удалось мне все это впихнуть примерно в 250 строк кода...

Не помню, вроде был у меня тогда вариант этой функции для писюхи... Но что-то меня там не устроило (вроде там на асме было довольно много написано).

Свой вариант выложу чуть позже, если кому интересно. А пока, тот кто не считает идиотизмом самостоятельно реализовывать то, что уже есть, может поупражнятся... Мне интересно, какой же вариант будет самым коротким...

 Профиль  
                  
 
 
Сообщение13.12.2005, 23:21 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Интересно... Вы формат вывода с экспонентой не рассматривали? И еще вопрос - я так понимаю, что размер буфера можно ограничить (ну хотя бы количеством цифр на дисплее). Это не так? Нужно действительно произвольый вариант. А последнее - а целочисленная библиотека доступна?

 Профиль  
                  
 
 
Сообщение14.12.2005, 08:32 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
незванный гость писал(а):
:evil:
Интересно... Вы формат вывода с экспонентой не рассматривали? И еще вопрос - я так понимаю, что размер буфера можно ограничить (ну хотя бы количеством цифр на дисплее). Это не так? Нужно действительно произвольый вариант. А последнее - а целочисленная библиотека доступна?


Скажем так - индикаторы бывают разные (от 8 знаков в строке до 40). Числа тоже надо выводить разные... Иногда - большие, с большим кол-вом знаков до десятичной точки - тогда приходится использовать экспоненциальный формат, иногда маленькие (скажем, когда отображается значение температуры - датчик выдает всего лишь в диапазоне от 0 до 200 градусов) - тогда используется обычный формат с десятичной точкой.

Да, размер буфера как раз ограничивается числом цифр, которое отводится на ЖКИ для вывода числа.

Насчет целочисленной библиотеки...
Функция преобразования целого в строку имеется (правда, писать ее тоже пришлось самостоятельно, но сейчас речь не о ней - можно считать, что она уже есть). В принципе, как в любом компиляторе C, там тоже доступно умножение, деление, сложение, вычитание как для целых чисел, так и для чисел с плав. точкой. Просто если для чисел с плав. точкой использовать эти операции, размеры программы сразу резко увеличиваются (подключается библиотека эмуляции операций с плав. точкой), поэтому я старался не выполнять никаких арифметических операций над числами с плав. точкой. Но дело даже не столько в этом... Раз уж прога выводит числа с плав. точкой на экран, значить где-то в ней хотя бы арифметические орерации над этими числами есть. Просто каждая такая операция отнимает кучу времени, поэтому стараешься их избегать...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group