реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> IEEE 754, Перевод в двоично-десятичный формат.
Белка12
сообщение Feb 7 2013, 21:36
Сообщение #1


Участник
*

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



Здравствуйте!
Вот у меня возникла непонятка. Я работала все время с целыми числами, т.к. работала, в основном, с микроконтроллерами. А тут такая незадача… Есть устройство, некий датчик, который передает данные в формате IEEE -754. Т.е. в виде дроби, с мантиссой и порядком. Сам стандарт посмотрела, в представлении все понятно, но мне, как говорится, абсолютно не нужно это представление, мне нужно вывести это число на дисплей, и только. Т.е. мне нужно перевести это число в нормальный шестнадцатиричный, или двоично-десятичный код, чтобы можно было просто вывести на дисплей моего прибора. Т.е, может, кто-то писал преобразование из IEEE 754 в двоично-десятичное число?
С уважением.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 7 2013, 22:11
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Поздравляю.
Вам таки придется перейти на Си, дабы таких вопросов больше не возникало.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Feb 7 2013, 22:13
Сообщение #3


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



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

Здесь есть обособленная реализация ftoa()
http://www.edaboard.com/thread5585.html

Успехов
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 8 2013, 05:17
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Вчера постеснялся дальше компостировать мозг про SDCC sm.gif
Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы
_fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c
В конце концов, реализация printf-large.c (это ужас, между нами говоря), но работает.

--
По ссылке постом выше: были матюки на то, что дескать "error prone"
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Feb 8 2013, 15:14
Сообщение #5


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



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

Цитата(_Pasha @ Feb 8 2013, 09:17) *
Но тем не менее, вижу массу реализаций в /usr/share/sdcc/lib/src файлы
_fs2sint.c _fs22uint.c _fs2ulong.c _fs2slong.c

Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 8 2013, 15:34
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Fat Robot @ Feb 8 2013, 18:14) *
Это функции преобразования типов. Насколько я понимаю задачу, они не годятся.

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

книжечка из старых, только недавно выбросил, проясняет детали.
Go to the top of the page
 
+Quote Post
Белка12
сообщение Feb 8 2013, 17:55
Сообщение #7


Участник
*

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



Цитата(_Pasha @ Feb 8 2013, 02:11) *
Поздравляю.
Вам таки придется перейти на Си, дабы таких вопросов больше не возникало.


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

Цитата(_Pasha @ Feb 8 2013, 19:34) *
книжечка из старых, только недавно выбросил, проясняет детали.


Уменя она есть и даже в бумажном варианте. Детали - деталями, как сложить да вычесть, эт, наверное, все знают.sm.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 8 2013, 18:02
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Белка12 @ Feb 8 2013, 21:51) *
куча вариантов, как преобразрвать десятичный формат в IEEE-754, но не наооброт...

Дык printf() это оно и есть.
Вывести на индикатор... индикатор-то какой?
Go to the top of the page
 
+Quote Post
Белка12
сообщение Feb 8 2013, 22:03
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 9 2013, 11:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Белка12
сообщение Feb 9 2013, 11:51
Сообщение #11


Участник
*

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



Спасибо, Палыч! sm.gif

Кстати.... smile3046.gif (Это я на себя ворчу). Читай инструкцию: стр. 171-173. Но, как говорится, хорошая мысял приходит опосля... biggrin.gif
Прикрепленные файлы
Прикрепленный файл  C51.PDF ( 1.27 мегабайт ) Кол-во скачиваний: 174
 
Go to the top of the page
 
+Quote Post
Белка12
сообщение Mar 19 2013, 16:32
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 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 таких директорий вообще нет.cranky.gif
Go to the top of the page
 
+Quote Post
Белка12
сообщение Mar 19 2013, 19:38
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 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

Успехов

Спасибо!
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 29 2013, 08:27
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Белка12 @ Mar 19 2013, 20:32) *
Это ж где искать? В моем Keil таких директорий вообще нет.cranky.gif

а это на кейл и не похоже biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 04:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016