Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

НЕстандартное сложение


Denis__ ©   (2009-01-19 14:07:00) 

Здравствуй, All!)) Есть задача, не пойму кое-что.
"Используя для вещественных чисел нормализованное представление вида : знак порядка, десятичный порядок(2 зн) знак мантиссы(4 зн)и заданные числа
a = +12+7153
b = +12-7153
c = +01-1002
вычислить
r = a + (b + c)
p = (a + b) + c

p = с = +01-1002 я вычислил. Т.к. порядки у a и b одинаковые. Прблема в нормализации мантисс. На лекциях говорили, что 1<=m<2 m - мантисса.А как понимать эти четырехзначные мантиссы?


Denis__   (2009-01-19 15:21:00) [1]

ок, спасибо)) Вроде разобрался.


Сергей М.   (2009-01-19 15:16:00) [2]

Тьфу, наоборот :
+1 порядок - сдвиг мантиссы на разряд вправо,
-1 порядок - сдвиг мантиссы на разряд влево,


Denis__   (2009-01-19 15:02:00) [3]

вот, тогда при выравнивании порядков b и с
b = +01+0000
с = +01-1002
b + c = c = +01-1002
a + (b + c) = a + c  = c.

А если выравнивать в другую сторону, т.е. с = +12+0000, то
b + c = b
a + (b + c) = a + b = 0 ( Сходится с ответом)

Как тогда действовать?


Сергей М.   (2009-01-19 14:55:00) [4]

Да, пардон, это у a и b одинаковые.


> Как при выравнивании порядков меняются мантиссы?


Сдвигаются в требуемую сторону.

Уменьшение порядка на 1 требует сдвига мантиссы вправо на 1 разряд. И наоборот - увеличение на 1 требует сдвига влево на 1


Denis__   (2009-01-19 14:54:00) [5]

В моем случае получается
a = (10^12)*7153
b = (10^12)*(-7153)
c = 1*(-1002)?
Так что ли?(


Denis__   (2009-01-19 14:46:00) [6]

b = +12-7153
c = +01-1002

выровнять порядок - значит порядок будет +01 , мантисса b = 0000?
b + с = c
а + с = с?
Или как? Как при выравнивании порядков меняются мантиссы?


MBo   (2009-01-19 14:44:00) [7]

Пример 0.259 + 40 = 4 * 10 + 0.0259 * 10 = 4.0259*10 ~ 40.25, если четыре значащих цифры учитываются


Сергей М.   (2009-01-19 14:43:00) [8]


> сначала выровнять порядки b и c.


Да.


> Т.е. из +12 получить +01


Зачем ?
У b и c порядки и знаки порядков одинаковые, значит достаточно сложить мантисы.
При переполнении результата сложения мантисс скорректировать результирующий порядок на соотв.значение.


MBo   (2009-01-19 14:41:00) [9]

>На лекциях говорили, что 1<=m<2 m - мантисса
это для бинарного представления, у тебя же десятичное, и, в зависимости от соглашения, мантисса может быть в пределах 0.1..1 или 1..10 (или даже 1000..9999)

Задача направлена на понимание ограниченной точности вещественных чисел, и зависимости результата вычислений от порядка действий
Для сложения чисел с разными порядками нужно привести их к одному порядку, сдвинув мантиссу (или дополнив нулями), подобно тому, как делается и при обычном сложении чисел на бумажке


Denis__   (2009-01-19 14:37:00) [10]

Как всегда коротко) И все же.
Как тогда нормализовать мантиссы?
a + (b  + c)
надо  сначала выровнять порядки b и c. Т.е. из +12 получить +01. при этом надо каждый раз отнимать от 12 1, а мантиссу числа b делить на 2? Оставляя только 4 знака каждый раз?


Сергей М.   (2009-01-19 14:32:00) [11]


> Прблема в нормализации мантисс


Мантисса считается нормализованной, если ее старший разряд не равен нулю.


Сергей М.   (2009-01-19 14:30:00) [12]


> как понимать эти четырехзначные мантиссы?


Вот прямо так и понимай - мантиса представлена 4-мя разрядами


Denis__   (2009-01-19 14:09:00) [13]

Сорри(
знак порядка, десятичный порядок(2 зн) знак мантиссы, мантисса(4 зн)


Наверх

Титульная страница Поиск, карта сайта Написать письмо