Форум: "Основная";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
ВнизПриведение к типу 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c