Вниз
Скачать: CL | DM;

Вычисления.   Найти похожие ветки 

 
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. Это будет побыстрее, чем через указатели.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.007 c
3-46253
Orion
2002-03-24 16:13
2002.04.15
Отображение данных из нескольких DataSet ов одновременно.


4-46544
Romul
2002-02-14 12:14
2002.04.15
Как проверить свернуто ли окно


1-46321
Cyrex
2002-04-01 17:34
2002.04.15
Обращение к объектам, созданным в Run-Time.


1-46313
ded_di
2002-04-03 14:20
2002.04.15
trichview


1-46412
sdram
2002-04-02 16:41
2002.04.15
Как вывести в отчете значения формул из базы.




   Наверх