|
Вопрос # 4 967/ вопрос открыт / |
|
Здравствуйте! помогите пожалуйста!!!
Дана программа (TurboPascal):
Program pr_04_01;
var R : real; M : array[0..5] of byte absolute R;
begin
R := -3/2;
Write( M[0],' ',M[1],' ', M[2],' ');
Write( M[3],' ', M[4], ' ', M[5] );
Readln;
end.
Определить, какие числа M[0], M[1], M[2], M[3], M[4], M[5] напечатает программа. Преподаватель вместо -3/2 задаст другое число !
 |
Вопрос задала: Иринчик (статус: Посетитель)
Вопрос отправлен: 26 января 2011, 16:23
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Иринчик!
Специально подгуглил и нашел.
Итак, 6 байт нужно представить в виде 48 бит.

0 < e <= 255
v = (-1)s * 2(e-129) * (1.f )
если e = 0, тогда v = 0.
то есть, в m[5] будет сохранена экспонента, у m[0] в старшем бите знак. m[0] .. m[4] сохраняют мантису.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 26 января 2011, 18:30
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 30 января 2011, 11:16; участников в обсуждении: 4.
|
Иринчик (статус: Посетитель), 26 января 2011, 16:46 [#1]:
И наоборот, преподаватель задает M[0], M[1], M[2], M[3], M[4], M[5], какое R напечатает программа? помогите, пожалуйста!!!!
|
|
Вадим К (статус: Академик), 26 января 2011, 18:05 [#2]:
тут уже в уме не посчитаешь так просто. Нужно знать, как представляется в памяти.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Толяныч (статус: 4-ый класс), 27 января 2011, 11:59 [#3]:
Я дико извиняюсь, но не совсем так. Знаковый бит и порядок будут "в одном конце" длинного слова.
http://ru.wikipedia.org/wiki/Число_одинарной_точности
Вопрос вроде простой, но поверг. ТрубоПаскаля у меня нет, попробовал Дельфи - получаю в байтах одни нули! Изъял не используемое мной описание absolute, заменил на Record case ... - все равно. Удивительное рядом...
|
|
Вадим К (статус: Академик), 27 января 2011, 12:14 [#4]:
уверены? это паскаль, а не делфи. В делфи real == single и оно 4 байта. в паскале оно 6 байт. в современном паскале этот тип называется real48 и не используется сейчас. потому что медленный и устаревший
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Толяныч (статус: 4-ый класс), 27 января 2011, 12:48 [#5]:
Попробовал... ( см.выше ) Но ведь стуктура процессора не изменяется от применяемого языка, он работает всегда одинаково. Другое дело что полученные результаты компилятор рассовывает по памяти в соответствии с тем, что он "считает правильным".
Когда я разбирал содержимое памяти еще для 16-разрядных процессоров, структура real была именно такой : знак числа - порядок - мантисса. И это согласовывалось и с вышеприведенной цитатой, и с арифметикой старой доброй СМ-4, в которой я прграммировал исключительно на ассемблере ( пижонство, конечно, имевшийся там Фортран давал вполне вменяемый код ).
|
|
Вадим К (статус: Академик), 27 января 2011, 13:45 [#6]:
мы говорим не о вещественном числе процессора, а о представлении типа real для компилятора языка паскаль.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
bugmenot (статус: 3-ий класс), 29 января 2011, 11:26 [#7]:
Толяныч, Real48 же!
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Иринчик (статус: Посетитель), 30 января 2011, 11:16 [#8]:
Ну так все таки, как ответить то ему по этому вопросу?))))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|