Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.004 c
3-46295
IronHawk
2002-03-21 10:58
2002.04.15
Иммитация нажатия клавиш DBNavigator !


1-46320
...
2002-04-03 16:05
2002.04.15
Ламерский вопрос


1-46300
Martyn
2002-04-02 11:27
2002.04.15
Вопрос по печати Bitmap в Delphi


3-46282
Art1
2002-03-22 16:16
2002.04.15
Помогите с изменением полей, плииииз.


14-46479
Alexandr
2002-03-06 14:02
2002.04.15
Знак





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский