2014-01-23 8 views
1

У меня возникла эта проблема. Я должен решить, где мне нужно умножить число чисел с плавающей запятой (16 бит), но я не могу ее дважды проверить. Любая помощь очень ценится.Умножение с плавающей запятой

с плавающей точкой А: 0 11000 0111000000 с плавающей точкой Б: 0 11010 1011000000

рассчитать показатели:

A: 24-15 = 9 B: 26-15 = 11

Вычислить мантиссы (а & б):

(2^9 * б) * (2^11 * б) = 2^9 + 11 * (а * б) + 2^20 * (а * б)

Переполнение, поэтому я увеличиваю показатель A до нормального как B (11).

Тогда я сдвиг мантиссы А в соответствии с расчетом:

1,0111> 0,10111> 0,010111.

Затем я умножаю, чтобы получить мантиссы.

    0.010111 
        * 1.101100 
        0000000 
        0000000 
       0010111 
       0010111 
      0000000 
      0010111 
     0010111_____ 
     0.100110110100 

Смену снова.

0,100110110100 < 1,00110110100

Снижение показателя на 1, так что 10.

Знак является 0, так что это положительное число.

Ответ: 0 01010 00110110100.

Является ли это правильно?

Заранее благодарен!

+1

Невозможно понять, что вы делаете из линии '(2^9 * b) * (2^11 * b) = 2^9 + 11 * (a * b) + 2^20 * (а * б) '. Вам не нужно выравнивать экспоненты для умножения: это то, что вы делаете, чтобы выровнять значения для ** сложения ** и ** вычитания **. –

+0

При выполнении такого рода работ я настоятельно рекомендую получить или записать конвертер из формата с плавающей запятой в десятичные числа. Это делает проверку намного проще. –

ответ

0

Похож binary16

Правомерно ?: Нет.

Оба «мантисса» или фракции должен включать подразумеваемых бит как его не минимальный показатель. So .1011000000 становится 1.1011000000.

Вместо 1.01 1100 0000 * 1.10 1100 0000 = 10.0110 1101 0000 0000 0000

Изменение показателя является то, чтобы рассмотреть после умножения, в дополнение к округлению.

Сдвиг вправо продукта 1.0011 0110 1000 0000 0000 0 и +1 к объективному экспоненте 9 + 11 + 1 -> 21.

Круглый продукт фракции до 10 бит
1.0011 0110 1000 0000 0000 0
1.0011 0110 10

Rebuild результат
знак 0^0 = 0
предвзятым показатель 21 + 15 = 36 = 100100, который перетекает. @Yves Daoust
доля = 0011 0110 10.

Переполнение обычно устанавливается на INF 0 11111 0000000000 = infinity

Не в два раза проверить мою работу еще.

0

Я вижу две проблемы:

  • Вы не зарегистрированы неявной 1 в качестве левого бита мантисс: 1.0111000000 * 1.1011000000,
  • экспоненте переполнению и результат просто не может быть представлено [ если бы экспоненту было подведено, вы могли бы денормализовать].
Смежные вопросы