Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

числа с плавающей точкой


appendix ©   (2004-08-07 17:32:00) 

Помогите разобраться каким образом число
десятичное 0.213 передаётся в виде 4 байтной последовательности
119 206 94 68
Знаю что используется экспаненциальная форма представления.
Мантисса должна быть нормализована т.е быть в пределах 1..2
Как 0,213 нормализовать?

SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
ГДЕ S - знак
   E - Экспанента
   М - Мантисса


ламер   (2004-08-11 20:26:00) [1]

если важно только "правильно обработать данные", то можно сделать очень просто:


var
 Data: array[0..3] of Byte;
 Sngl: PSingle;
...
 // массив Data заполняется полученными данными...
 Sngl := @Data[0]; // Sngl^ = полученному значению типа Single.
 ShowMessage(FloatToStr(Sngl^));
...


Alx2   (2004-08-11 19:24:00) [2]

Начать можно с этого: http://www.vcl.ru/html/dos/appar/ch12.htm#ch12_1


Alx2   (2004-08-11 19:06:00) [3]

>appendix ©   (11.08.04 19:02) [5]
Может, вместо того, чтобы "обнаруживать", почитать документацию? Если под рукой нет, можно на www.intel.com сходить.

А формула тут как и везде - система счисления по основанию 2. Плюс небольшой нюанс.


appendix   (2004-08-11 19:04:00) [4]

Вероятно формула не та что нужно.
Число в формате float.

Удалось выяснить коды для следующих чисел:

0 0    0    0    0
1 0    0    128  63
1.1 205  204  140  63
1.2 154  153  153  63
1.01 174  71   129  63
1.02 92   143  130  63
2.0 0    0    0    64
2.1 102  102  6    64
3 0    0    64   64
4 0    0    128  64
5 0    0    160  64
6 0    0    192  64
7 0    0    224  64
10 0    0    32   65
100 0    0    200  66

0.213 119  206  94   68
Какая то логика в этом есть

может кто найдёт формулу

Передаются данные по ком порту...если что но это не важно, главное мне нужно правильно обработать данные.


appendix   (2004-08-11 19:02:00) [5]

Вероятно формула не та что нужно.
Число в формате float.

Удалось выяснить коды для следующих чисел:

0 0    0    0    0
1 0    0    128  63
1.1 205  204  140  63
1.2 154  153  153  63
1.01 174  71   129  63
1.02 92   143  130  63
2.0 0    0    0    64
2.1 102  102  6    64
3 0    0    64   64
4 0    0    128  64
5 0    0    160  64
6 0    0    192  64
7 0    0    224  64
10 0    0    32   65
100 0    0    200  66

0.213 119  206  94   68
Какая то логика в этом есть

может кто найдёт формулу

Передаются данные по ком порту...если что но это не важно, главное мне нужно правильно обработать данные.


Мастер   (2004-08-10 17:59:00) [6]

>appendix ©   (10.08.04 17:07) [3]
Обнаружено что число 2,000 передаётся в виде 0 0 0 64

Куда и каким образом?


appendix   (2004-08-10 17:07:00) [7]

Обнаружено что число 2,000 передаётся в виде 0 0 0 64


начинающий   (2004-08-07 19:14:00) [8]

Приведенный вами код - скорее всего несколько округлен! У меня эти четыре байта следующие(в HEX):
3E5A1CAC=0|01111100|10110100001110010101100
Найдём смещение в мантиссе:
7C- 7F=-3 (результат < 1)
Мантиса= 1+1/2Y1+1/2Y3+1/2Y4+1/2Y6+1/2Y11+1/2Y12+1/2Y13+1/2Y16+1/2Y18+1/2Y20+1/2Y21=1,703999996185302734375
1,703999996185302734375*1/2Y3=0,212999999523162841796875
Примечание: жирным выделены константы! 'Y'-означает возведение в степень(сокращение для калькулятора Windows)


wicked   (2004-08-07 19:01:00) [9]

тип float/single?...


Наверх

Титульная страница Поиск, карта сайта Написать письмо