Белка12 0 7 февраля, 2013 Опубликовано 7 февраля, 2013 · Жалоба Здравствуйте! Вот у меня возникла непонятка. Я работала все время с целыми числами, т.к. работала, в основном, с микроконтроллерами. А тут такая незадача… Есть устройство, некий датчик, который передает данные в формате IEEE -754. Т.е. в виде дроби, с мантиссой и порядком. Сам стандарт посмотрела, в представлении все понятно, но мне, как говорится, абсолютно не нужно это представление, мне нужно вывести это число на дисплей, и только. Т.е. мне нужно перевести это число в нормальный шестнадцатиричный, или двоично-десятичный код, чтобы можно было просто вывести на дисплей моего прибора. Т.е, может, кто-то писал преобразование из IEEE 754 в двоично-десятичное число? С уважением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 7 февраля, 2013 Опубликовано 7 февраля, 2013 · Жалоба Поздравляю. Вам таки придется перейти на Си, дабы таких вопросов больше не возникало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 7 февраля, 2013 Опубликовано 7 февраля, 2013 · Жалоба IEEE 754 - стандартный float, так что все делается функциями ftoa() или sprintf() из стандартной библиотеки С. Здесь есть обособленная реализация ftoa() http://www.edaboard.com/thread5585.html Успехов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Вчера постеснялся дальше компостировать мозг про SDCC :) Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы _fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c В конце концов, реализация printf-large.c (это ужас, между нами говоря), но работает. -- По ссылке постом выше: были матюки на то, что дескать "error prone" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Это функции преобразования типов. Насколько я понимаю задачу, они не годятся. Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы _fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Это функции преобразования типов. Насколько я понимаю задачу, они не годятся. Да там допилить не сложно, видно, как реализуемо на асме. А во вторых, если полновесный sprintf() помещается - вообще проблем не вижу. книжечка из старых, только недавно выбросил, проясняет детали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Поздравляю. Вам таки придется перейти на Си, дабы таких вопросов больше не возникало. Хоть Си, хоть что. Надо понять алгоритм., куда не глянешь, куча вариантов, как преобразрвать десятичный формат в IEEE-754, но не наооброт... книжечка из старых, только недавно выбросил, проясняет детали. Уменя она есть и даже в бумажном варианте. Детали - деталями, как сложить да вычесть, эт, наверное, все знают.:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба куча вариантов, как преобразрвать десятичный формат в IEEE-754, но не наооброт... Дык printf() это оно и есть. Вывести на индикатор... индикатор-то какой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 (изменено) · Жалоба Дык printf() это оно и есть. Вывести на индикатор... индикатор-то какой? Дисплей OLED BL 12864G. Кстати, функция printf() осуществляет вывод (куда? допустим, в какой-то массив) в указанном формате. Т.е. укажите %/d, получите десятичный формат. Это как раз понятно. Вот только мне не очень понятно само преобразование, как оно будет осуществляться? Т.е. нужна ли предварительная обработка чисел в IEEEE 754 формате? Или я ввожу один массив, в формате IEEEE 754 и эта функция автоматически переводит этот массив в массив float десятичных чисел? Т.е. в Си подразумевается, что все двоичные числа float должны соответствовать стандарту IEEEE 754, или все же нет? Изменено 8 февраля, 2013 пользователем Белка12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 5 9 февраля, 2013 Опубликовано 9 февраля, 2013 · Жалоба в Си подразумевается, что все двоичные числа float должны соответствовать стандарту IEEEE 754, или все же нет?Из стандарта ISO 9899:The C floating types match the IEC 60559 formats as follows: — The float type matches the IEC 60559 single format. — The double type matches the IEC 60559 double format. — The long double type matches an IEC 60559 extended format, else a non-IEC 60559 extended format, else the IEC 60559 double format. Any non-IEC 60559 extended format used for the long double type shall have more precision than IEC 60559 double and at least the range of IEC 60559 double. Стандарт IEC 60559 - то же, что IEEE 754. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 9 февраля, 2013 Опубликовано 9 февраля, 2013 · Жалоба Спасибо, Палыч! :) Кстати.... :smile3046: (Это я на себя ворчу). Читай инструкцию: стр. 171-173. Но, как говорится, хорошая мысял приходит опосля... C51.PDF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы _fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c Это ж где искать? В моем Keil таких директорий вообще нет.:cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба IEEE 754 - стандартный float, так что все делается функциями ftoa() или sprintf() из стандартной библиотеки С. Здесь есть обособленная реализация ftoa() http://www.edaboard.com/thread5585.html Успехов Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 29 марта, 2013 Опубликовано 29 марта, 2013 · Жалоба Это ж где искать? В моем Keil таких директорий вообще нет.:cranky: а это на кейл и не похоже Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться