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

Вниз

Приведение к типу Single   Найти похожие ветки 

 
bobah ©   (2007-06-18 16:00) [0]

Здравствуйте!
Привожу к типу 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 или процессоров?


 
MBo ©   (2007-06-18 16:27) [1]

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

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


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

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


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


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

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


 
bobah ©   (2007-06-18 16:45) [4]


>> 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

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


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


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

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


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


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


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

Да


 
Kolan ©   (2007-06-18 20:22) [7]

> bobah ©   (18.06.07 16:00)

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


 
Anatoly Podgoretsky ©   (2007-06-18 20:39) [8]


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

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


 
bobah ©   (2007-06-19 10:57) [9]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
2-1185783990
Забыл как зовут
2007-07-30 12:26
2007.08.26
Смена курсора


15-1185785892
click
2007-07-30 12:58
2007.08.26
плавный скроллинг TScrollBox


15-1185700339
IMHO
2007-07-29 13:12
2007.08.26
Что вы выбираете в своей жизни?


2-1186145125
Янкер
2007-08-03 16:45
2007.08.26
Как програмно переключить IE в Автономный режим и обратно


15-1185830927
uses1
2007-07-31 01:28
2007.08.26
Как упаковать массив чисел не кратных двойке?