Форум: "Потрепаться";
Текущий архив: 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. Это будет побыстрее, чем через указатели.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c