Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

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

 
appendix ©   (2004-08-07 17:32) [0]

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

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


 
wicked ©   (2004-08-07 19:01) [1]

тип float/single?...


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

Приведенный вами код - скорее всего несколько округлен! У меня эти четыре байта следующие(в 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)


 
appendix ©   (2004-08-10 17:07) [3]

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


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

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

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


 
appendix ©   (2004-08-11 19:02) [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
Какая то логика в этом есть

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

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


 
appendix ©   (2004-08-11 19:04) [6]

Вероятно формула не та что нужно.
Число в формате 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
Какая то логика в этом есть

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

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


 
Alx2 ©   (2004-08-11 19:06) [7]

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

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


 
Alx2 ©   (2004-08-11 19:24) [8]

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


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

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


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



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1091605582
KAA
2004-08-04 11:46
2004.08.29
MSSQL 2000 Не могу добавить поле в таблицу из-за репликации


1-1092310736
Subdigger
2004-08-12 15:38
2004.08.29
TPageControl


8-1086764701
Mig
2004-06-09 11:05
2004.08.29
Перевод вордовского документа в картинку


6-1088501094
EvgeniyR
2004-06-29 13:24
2004.08.29
Обмен файлами


1-1092304991
SASH2
2004-08-12 14:03
2004.08.29
Округление числа?