Смещение мантиссы с плавающей точкой - PullRequest
0 голосов
/ 20 февраля 2010

Кто-нибудь знает, как решить эту проблему?

* a = 1.0 × 2^9
* b = −1.0 × 2^9
* c = 1.0 × 2^1 

Используя плавающую точку (представление использует 14-битный формат, 5 битов для показателя степени со смещением 16, нормализованную мантиссу 8 битов и бит единого знака для числа), выполните следующие два расчеты, обращая пристальное внимание на порядок операций.

* b + (a + c) = ?
* (b + a) + c = ? 

Ответы [ 2 ]

0 голосов
/ 22 февраля 2010
S EEEEE MMMMMMMM
0 11001 10000000 a
1 11001 10000000 b
0 10001 10000000 c

0 11001 00000000 c, denormalized (uh oh!)

Если я делаю это правильно, похоже, что вы не можете денормализовать c к показателю a, так что вы в конечном итоге добавляете 1 к -1 с тем же показателем, и в результате вы получаете 0. Я считаю, что это урок об ограничениях добавления небольшого числа к большому в формате с плавающей запятой.

Я оставлю вам вторую проблему ...

0 голосов
/ 20 февраля 2010

Чтобы пройти это упражнение, вы просто выполните дополнительные шаги, как описано, например, там: http://en.wikipedia.org/wiki/Floating_point#Addition_and_subtraction

...