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

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

Приведение к типу Single [D7, WinXP]


bobah ©   (2007-06-18 16:00:00) 

Здравствуйте!
Привожу к типу Single последовательность байт,
т.е к виду seeeeeeeemmmmmmmm...m,
где s-бит знака; e - бит экспоненты; m - бит мантисы

Пример:


function GetFloatFromByteDevice(const e,f1,f2,f3: Byte): Single;
// e - двоичный порядок
// f1 - старший байт мантиссы; f3 - младший байт
var buf : Array[0..3] of Byte;
begin
// TODO: Возможно, такая конструкция не совсеми процами работать будет
buf[0] := f3;
buf[1] := f2;
buf[2] := (f1 and 127) or ((e and 1) shl 7);
buf[3] := ((e shr 1) and 127) or (f1 and 128);
Result := Single(buf);
end;


Возможно ли что конструкция seeeeeeeemmmmmmmm...m (для Single) разная для разных OC или процессоров?


bobah   (2007-06-19 10:57:00) [1]

Большое всем спасибо.


Anatoly Podgoretsky   (2007-06-18 20:39:00) [2]


> Про дерективу absolute знаете? Мож так проще будет?

Ты хоть понял о чем тут идет речь?


Kolan   (2007-06-18 20:22:00) [3]

> bobah ©   (18.06.07 16:00)

Про дерективу absolute знаете? Мож так проще будет?


Однокамушкин   (2007-06-18 19:28:00) [4]


> bobah ©   (18.06.07 17:06) [5]
> То есть на всех известных сейчас PC функция (1 топик) будет
> отрабатывать
> корректно?

Да


bobah   (2007-06-18 17:06:00) [5]


>> Однокамушкин   (18.06.07 16:29) [3]

>> Порядок хранения байт этим стандартом не регламентируется, поэтому у >> разных процессоров он разный... но по сути - согласен, в семействе X86
>> никаких отклонений быть не может...


То есть на всех известных сейчас PC функция (1 топик) будет отрабатывать
корректно?


bobah   (2007-06-18 16:45:00) [6]


>> MBo ©   (18.06.07 16:27) [1]

>> А что за задача вообще?


Задача в том что я опрашиваю приборы с компа по RS-232. Float-значения там храняться в особо извращенном виде, а именно 4 байта:
 eeeeeeee smmmmmmm mmmmmmmm mmmmmmmm
     1б.-e         2б-f1          3б-f2           4б-f3
И вот надо мне их перевести в Single понятный для компьютера. Написал функцию изложенную выше.

А потом задумался, будет ли она всегда работать на всех популярных процессорах?

Или надо 2 в степени возводить, пересчитывать по формулам типа как ниже (приведен в протоколе обмена прибора):

А = (-1)^0 ⋅ (2^0 + 2^-1 + 2^-4 ) ⋅ 2^(129 - 127) = 6.25

 e        f0            f1           f2
129 01001000 00000000 00000000

Вот и думаю как лучше?


Однокамушкин   (2007-06-18 16:29:00) [7]


> MBo ©   (18.06.07 16:27) [1]
> Процессоры X86 семейства поддерживают стандарт IEEE754,в
> котором описан, в частности, формат Single.

Порядок хранения байт этим стандартом не регламентируется, поэтому у разных процессоров он разный... но по сути - согласен, в семействе X86 никаких отклонений быть не может...


Однокамушкин   (2007-06-18 16:28:00) [8]

Для процессоров точно разная, у мотороловских, например, идут в другом порядке байты, а вот у интела и АМД всё всегда одинаково, и от ОС точно не зависит...


MBo   (2007-06-18 16:27:00) [9]

Процессоры X86 семейства поддерживают стандарт IEEE754,в котором описан, в частности, формат Single. Для кардинально других процессоров вряд ли удастся на Дельфи программу написать...

А что за задача вообще?


Наверх

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