Перейти к содержанию
    

IEEE 754

Здравствуйте!

Вот у меня возникла непонятка. Я работала все время с целыми числами, т.к. работала, в основном, с микроконтроллерами. А тут такая незадача… Есть устройство, некий датчик, который передает данные в формате IEEE -754. Т.е. в виде дроби, с мантиссой и порядком. Сам стандарт посмотрела, в представлении все понятно, но мне, как говорится, абсолютно не нужно это представление, мне нужно вывести это число на дисплей, и только. Т.е. мне нужно перевести это число в нормальный шестнадцатиричный, или двоично-десятичный код, чтобы можно было просто вывести на дисплей моего прибора. Т.е, может, кто-то писал преобразование из IEEE 754 в двоично-десятичное число?

С уважением.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поздравляю.

Вам таки придется перейти на Си, дабы таких вопросов больше не возникало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IEEE 754 - стандартный float, так что все делается функциями ftoa() или sprintf() из стандартной библиотеки С.

 

Здесь есть обособленная реализация ftoa()

http://www.edaboard.com/thread5585.html

 

Успехов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вчера постеснялся дальше компостировать мозг про SDCC :)

Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы

_fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c

В конце концов, реализация printf-large.c (это ужас, между нами говоря), но работает.

 

--

По ссылке постом выше: были матюки на то, что дескать "error prone"

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это функции преобразования типов. Насколько я понимаю задачу, они не годятся.

 

Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы

_fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это функции преобразования типов. Насколько я понимаю задачу, они не годятся.

Да там допилить не сложно, видно, как реализуемо на асме.

А во вторых, если полновесный sprintf() помещается - вообще проблем не вижу.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поздравляю.

Вам таки придется перейти на Си, дабы таких вопросов больше не возникало.

 

Хоть Си, хоть что. Надо понять алгоритм., куда не глянешь, куча вариантов, как преобразрвать десятичный формат в IEEE-754, но не наооброт...

 

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

 

Уменя она есть и даже в бумажном варианте. Детали - деталями, как сложить да вычесть, эт, наверное, все знают.:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

куча вариантов, как преобразрвать десятичный формат в IEEE-754, но не наооброт...

Дык printf() это оно и есть.

Вывести на индикатор... индикатор-то какой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык printf() это оно и есть.

Вывести на индикатор... индикатор-то какой?

 

Дисплей OLED BL 12864G.

 

Кстати, функция printf() осуществляет вывод (куда? допустим, в какой-то массив) в указанном формате. Т.е. укажите %/d, получите десятичный формат. Это как раз понятно. Вот только мне не очень понятно само преобразование, как оно будет осуществляться? Т.е. нужна ли предварительная обработка чисел в IEEEE 754 формате? Или я ввожу один массив, в формате IEEEE 754 и эта функция автоматически переводит этот массив в массив float десятичных чисел?

 

Т.е. в Си подразумевается, что все двоичные числа float должны соответствовать стандарту IEEEE 754, или все же нет?

Изменено пользователем Белка12

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в Си подразумевается, что все двоичные числа 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, Палыч! :)

 

Кстати.... :smile3046: (Это я на себя ворчу). Читай инструкцию: стр. 171-173. Но, как говорится, хорошая мысял приходит опосля... :biggrin:

C51.PDF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы

_fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c

Это ж где искать? В моем Keil таких директорий вообще нет.:cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IEEE 754 - стандартный float, так что все делается функциями ftoa() или sprintf() из стандартной библиотеки С.

 

Здесь есть обособленная реализация ftoa()

http://www.edaboard.com/thread5585.html

 

Успехов

Спасибо!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это ж где искать? В моем Keil таких директорий вообще нет.:cranky:

а это на кейл и не похоже :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...