Главная страница
    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.005 c
3-46252
visa
2002-03-25 17:20
2002.04.15
halcyon - quickrep


1-46325
QWest
2002-04-02 17:49
2002.04.15
Где ошибка?


7-46524
SAlex
2002-01-23 05:13
2002.04.15
Как определить возможные размеры шрифтов в системе


4-46549
Ruslan_
2002-02-09 14:53
2002.04.15
GetWindowText


1-46363
Gellalina
2002-04-04 13:30
2002.04.15
Передать значение переменной из Unit1 в Unit2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский