Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Вниз

Вычисления. 


rambler   (2002-03-05 17:58) [0]

Доброго времени суток программеры, возник вопрос:
как получить число (real) если известны его младший (byte) и старший (byte) разряды.



Digitman   (2002-03-05 18:06) [1]

TMyRealData = packed record
LoByte: Byte;
HiByte: Byte;
end;

var
RealData: TMyRealData;
RealValue: Single;
...
RealValue := Single(RealData);



PVOzerski   (2002-03-06 10:17) [2]

2Digitman:
Извините, но, несмотря на идеологическую правильность, Ваш рецепт - не для Паскаля.
Я, почувствовав сомнения, попробовал откомпилить его (BP7, D3, D6, FPC 1.1, VP 2.1).
Все компиляторы отругались на "invalid typecast".
Предлагаю 3 заведомо работоспособных варианта:
(1)
type
TMyRealData=packed record
case integer of
0:(
LoByte:Byte;
HiByte:Byte);
1:(r:single);
end;
var
b1,b2:byte;
RealData:TMyRealData;
RealValue:Single;
begin
with RealData do
begin
LoByte:=b1;
HiByte:=b2;
RealValue:=r;
end;
end.

(2)
var
b:array[1..2]of byte;
RealData:single absolute b;
begin
end;

(3)
type
TMyRealData=packed record
LoByte:Byte;
HiByte:Byte;
end;
var
RealData:TMyRealData;
RealValue:Single;
begin
RealValue:=Single(pointer(@RealData)^);
end.

А также предлагаю, по мере возможности, проверять собственные решения, перед тем как советовать.



Digitman   (2002-03-06 11:55) [3]

Да, признаю - был неточен.

TMyRealData = packed record
LoByte: Byte;
HiByte: Byte;
end;

var
RealData: TMyRealData;
RealValue: Single;
...
RealValue := PSingle(@RealData)^;




Shaman_Naydak   (2002-03-06 13:20) [4]

Народ, все это замечательно, но для справки к примеру из D5
Type Size in bytes
Real48 6
Single 4
Double 8
Extended 10
Comp 8
Currency 8

Какие к черту старший и младший байт?? Старшее и младшее слово я еще могу понять



PVOzerski   (2002-03-06 13:29) [5]

2Shaman_Naydak:
Вы правы... Меняем во ВСЕХ примерах byte на word!
:-) & :-(



VictorT   (2002-03-06 13:55) [6]

А может так: имеем переменную веществнного типа, получаем на неё указатель, указатель приводим к указателю на целый тип и помещаем по нему байты (слова), инкрементировав указатель для каждого следующего байта (слова) и имеем в вечественной переменной значение.



Digitman   (2002-03-06 14:37) [7]

для решения задачи требуется всего лишь уточнить у автора, не идет ли речь о IEEE754. Если таки идет, то он либо ошибся (имеются HiWord:LoWord) либо это не IEEE754 (а более ранний стандарт, позволяющий хранить FP-представление в 16-разр.слове, как, например, это имело место быть в семействе DEC-совместимых машин - CM, ДВК и иже с ними)



Юрий Зотов   (2002-03-06 15:19) [8]

Можно преобразовывать и через Absolute. Это будет побыстрее, чем через указатели.




Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.018 c
1-46404           UnDISCOvery           2002-04-02 13:09  2002.04.15  
Интерактивный ReSize ! Как ???


1-46323           dymka                 2002-04-03 08:06  2002.04.15  
Нужен совет по проектированию компонент


3-46224           Евгений-Зеленоград    2002-03-05 23:06  2002.04.15  
Базы данных без BDE - EASY TABLE!


1-46408           BofA                  2002-04-02 15:29  2002.04.15  
Как прочитать строку из файла


3-46266           Марина                2002-03-26 08:24  2002.04.15  
EmptyTable