|
|
  |
IEEE 754, Перевод в двоично-десятичный формат. |
|
|
|
Feb 7 2013, 21:36
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Здравствуйте! Вот у меня возникла непонятка. Я работала все время с целыми числами, т.к. работала, в основном, с микроконтроллерами. А тут такая незадача… Есть устройство, некий датчик, который передает данные в формате IEEE -754. Т.е. в виде дроби, с мантиссой и порядком. Сам стандарт посмотрела, в представлении все понятно, но мне, как говорится, абсолютно не нужно это представление, мне нужно вывести это число на дисплей, и только. Т.е. мне нужно перевести это число в нормальный шестнадцатиричный, или двоично-десятичный код, чтобы можно было просто вывести на дисплей моего прибора. Т.е, может, кто-то писал преобразование из IEEE 754 в двоично-десятичное число? С уважением.
|
|
|
|
|
Feb 8 2013, 05:17
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Вчера постеснялся дальше компостировать мозг про SDCC  Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы _fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c В конце концов, реализация printf-large.c (это ужас, между нами говоря), но работает. -- По ссылке постом выше: были матюки на то, что дескать "error prone"
|
|
|
|
|
Feb 8 2013, 17:55
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(_Pasha @ Feb 8 2013, 02:11)  Поздравляю. Вам таки придется перейти на Си, дабы таких вопросов больше не возникало. Хоть Си, хоть что. Надо понять алгоритм., куда не глянешь, куча вариантов, как преобразрвать десятичный формат в IEEE-754, но не наооброт... Цитата(_Pasha @ Feb 8 2013, 19:34)  книжечка из старых, только недавно выбросил, проясняет детали. Уменя она есть и даже в бумажном варианте. Детали - деталями, как сложить да вычесть, эт, наверное, все знают.
|
|
|
|
|
Feb 8 2013, 22:03
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(_Pasha @ Feb 8 2013, 22:02)  Дык printf() это оно и есть. Вывести на индикатор... индикатор-то какой? Дисплей OLED BL 12864G. Кстати, функция printf() осуществляет вывод (куда? допустим, в какой-то массив) в указанном формате. Т.е. укажите %/d, получите десятичный формат. Это как раз понятно. Вот только мне не очень понятно само преобразование, как оно будет осуществляться? Т.е. нужна ли предварительная обработка чисел в IEEEE 754 формате? Или я ввожу один массив, в формате IEEEE 754 и эта функция автоматически переводит этот массив в массив float десятичных чисел? Т.е. в Си подразумевается, что все двоичные числа float должны соответствовать стандарту IEEEE 754, или все же нет?
Сообщение отредактировал Белка12 - Feb 8 2013, 22:06
|
|
|
|
|
Feb 9 2013, 11:00
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Белка12 @ Feb 9 2013, 02:03)  в Си подразумевается, что все двоичные числа 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.
|
|
|
|
|
Feb 9 2013, 11:51
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Спасибо, Палыч!  Кстати....  (Это я на себя ворчу). Читай инструкцию: стр. 171-173. Но, как говорится, хорошая мысял приходит опосля...
Прикрепленные файлы
C51.PDF ( 1.27 мегабайт )
Кол-во скачиваний: 174
|
|
|
|
|
Mar 19 2013, 16:32
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(_Pasha @ Feb 8 2013, 09:17)  Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы _fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c Это ж где искать? В моем Keil таких директорий вообще нет.
|
|
|
|
|
Mar 19 2013, 19:38
|

Участник

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159

|
Цитата(Fat Robot @ Feb 8 2013, 02:13)  IEEE 754 - стандартный float, так что все делается функциями ftoa() или sprintf() из стандартной библиотеки С. Здесь есть обособленная реализация ftoa() http://www.edaboard.com/thread5585.htmlУспехов Спасибо!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|