Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.15;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.016 c
6-46469
Lenidus
2002-02-03 15:29
2002.04.15
Как определить на какую ссылку вы нажали в окне Webbrowser?


7-46532
Hermit
2002-01-19 16:33
2002.04.15
Вызов функции из dll


1-46447
Ghost.
2002-04-03 10:41
2002.04.15
Может это очень просто...


4-46545
fddiynic
2002-02-13 04:10
2002.04.15
winaip32


1-46361
deleon
2002-03-28 09:18
2002.04.15
Может кто знает?