Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2008, 12:43   #1
zwook
 
Регистрация: 28.10.2008
Сообщений: 5
По умолчанию Несовсем программирование... нужна помощь

Сразу извиняюсь, это не совсем связано с программированием но очень очень нужно чтобы вы мне помогли

Значит есть у меня двоичное двойное слово - 1111101110100000000000000000000

Задание:Распишите формулу для перевода мантиссы в десятичную систему счисления как числа с целой и дробной частью и получите десятичное значение мантиссы.

Ну вопервых я нашел характеристику 11110111 = 247, уменьшил её на 127 = 120. Сразу скажу честно зачем характеристика нужна я не понимаю

1 разряд это знак мантиссы то есть число в минусе.

ну я прикинул что -1,01 = 1*2^0+0*2^-1+1*2^-2 = -1,25 это правильно?

Просто незнаю к кому еще обратиться! Так, что объясните мне пожалуйста правильно ли я все сделал и зачем нужна характеристика!
zwook вне форума Ответить с цитированием
Старый 28.10.2008, 13:51   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

отвечаю на ваш вопрос:
120 - это не мантисса....... это экспонента....... она может принимать значения от 127 до -128....... для этого и прибавляется 127......

запись мантиссы в вашем случае "101"........ т.е. "1,01"......... но!! вы не учли один момент...... мантисса всегда выравнивается, чтобы её первый знак был "1"...... поэтому его просто не записывают........ значит ваша мантисса "1,101" переводим...... получаем "1,625"....... экспонента означает умножение на 2 в степени "экспонента".......
значит всё число "-1,625 умножить на (2 в степени 120)"...... большое число...... 37 знаков))))) но раз вам только мантиссу надо, то "-1,625"
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 28.10.2008, 14:39   #3
zwook
 
Регистрация: 28.10.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Min Посмотреть сообщение
отвечаю на ваш вопрос:
120 - это не мантисса....... это экспонента....... она может принимать значения от 127 до -128....... для этого и прибавляется 127......

запись мантиссы в вашем случае "101"........ т.е. "1,01"......... но!! вы не учли один момент...... мантисса всегда выравнивается, чтобы её первый знак был "1"...... поэтому его просто не записывают........ значит ваша мантисса "1,101" переводим...... получаем "1,625"....... экспонента означает умножение на 2 в степени "экспонента".......
значит всё число "-1,625 умножить на (2 в степени 120)"...... большое число...... 37 знаков))))) но раз вам только мантиссу надо, то "-1,625"
Огромное спасибо за ответ! Выручил меня Вот только вопрос, в одном сайте прочитал, что экспонента всегда положительная, а у меня в книжке как пример написано 1.6525^-68, как так?

P.S. Раз я это число умножаю на 2 в степени экспоненты то получается что число всегда положительное?

Последний раз редактировалось zwook; 28.10.2008 в 14:43.
zwook вне форума Ответить с цитированием
Старый 28.10.2008, 14:44   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Min, по-моему Вы путаете. У ТС все правильно.
(правда, в числе не хватает одного одного разряда. Но если ТС говорит, что знак "-", будет считать, что просто не дописан один 0).

Разбиваем число

- ----8---- ------------23--------------
1 11110111 0100000 00000000 00000000
Перед мантиссой неявная единица 1.01

-1,25*2^120 = -1,66153499473114e+36 (просто на калькуляторе)

Ну, и для проверки:

Код:
type SingleBytes = array [0..3] of byte;
var S:Single;
begin
   WriteLn(sizeof(S));          // 4
   SingleBytes(S)[0] := $00;
   SingleBytes(S)[1] := $00;
   SingleBytes(S)[2] := $A0;    //           1 010000
   SingleBytes(S)[3] := $FB;    // 1 1111011
   WriteLn(S);                  // -1.66153499473114E+0036

   ReadLn;
end.
Про нормализованный порядок можно прочитать здесь
alexBlack вне форума Ответить с цитированием
Старый 28.10.2008, 14:56   #5
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

да да да))))) пардон...... это я циферки посчитал криво..... я их с конца считал, а там действительно нуля нехватает)))))........ извинителяюсь)))))) действительно "-1,25"......
нащет экспоненты...... она записывается как положительное число..... у неё нету отдельного бита знака...... вот поэтому записывается сумма со 127...... чтобы отрицательные числа задействовать можно было...
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 28.10.2008, 15:32   #6
zwook
 
Регистрация: 28.10.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Min, по-моему Вы путаете. У ТС все правильно.
(правда, в числе не хватает одного одного разряда. Но если ТС говорит, что знак "-", будет считать, что просто не дописан один 0).

Разбиваем число

- ----8---- ------------23--------------
1 11110111 0100000 00000000 00000000
Перед мантиссой неявная единица 1.01

-1,25*2^120 = -1,66153499473114e+36 (просто на калькуляторе)

Ну, и для проверки:

Код:
type SingleBytes = array [0..3] of byte;
var S:Single;
begin
   WriteLn(sizeof(S));          // 4
   SingleBytes(S)[0] := $00;
   SingleBytes(S)[1] := $00;
   SingleBytes(S)[2] := $A0;    //           1 010000
   SingleBytes(S)[3] := $FB;    // 1 1111011
   WriteLn(S);                  // -1.66153499473114E+0036

   ReadLn;
end.
Про нормализованный порядок можно прочитать здесь
Спасибо за повторное разъяснение и ссылку, вот только я не пойму как отличить двоичное двойное слово с плавающей точкой от такого же с фиксированной точкой? ведь и то и другое записывается одинаково! Или я чего-то не понял
zwook вне форума Ответить с цитированием
Старый 28.10.2008, 16:32   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от zwook Посмотреть сообщение
Спасибо за повторное разъяснение и ссылку, вот только я не пойму как отличить двоичное двойное слово с плавающей точкой от такого же с фиксированной точкой? ведь и то и другое записывается одинаково! Или я чего-то не понял
Вы имеете в виду двойное слово для представления целого и такое-же для вещественного ? - тогда никак. Это зависит от того, как Вы их используете.
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь Caragius Паскаль, Turbo Pascal, PascalABC.NET 8 08.04.2010 17:29
Нужна помощь(сетевое программирование) mager Общие вопросы C/C++ 6 14.02.2008 06:47
Нужна помощь по Си. Coach Помощь студентам 3 08.11.2007 01:08