![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
числа с плавающей точкой
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?...