2013-07-29 2 views
1

Я хочу преобразовать следующие два числа в модифицированный IEEE плавающий пункт (FPS), модифицированный (16 бит), изменив 23-битную дробную часть на 7 битной дробной части и добавить их. Но я не знаю, правильно ли я сделал это и как преобразовать результат обратно в десятичный, чтобы получить приблизительно 28.625Добавление 16-разрядных чисел с плавающей запятой и как преобразовать их обратно в десятичные

Число в скобках - это скрытые биты (Потому что мы преобразуем число, например, 3.5 в 11.1 * 2^0, затем 1.11 * 2^1 мы опускаем, что левые «1», и мы называем это скрытый бит)

enter image description here

ответ

3

Число не добавляется путем добавления их significands в то время как их показатели различны. Это похоже на попытку добавить 25.25 до 3.375, добавив 2525 к 3375. Это не работает. Вы должны выровнять соответствующие биты, сдвинув их и соответствующим образом отредактировать показатели. Если бы эти два числа:

  • 1,1001010 • 2
  • 1,1011000 • 2

Тогда вы бы настроить изменение меньшего числа, давая эта пара:

  • 1 .1001010 • 2 (такой же, как оригинал)
  • 0,0011011 • 2 (сдвинуты три бита вправо и добавили три экспоненту)

Затем добавьте их:

  • 1,1100101 • 2

Затем вы можете округлить это число, если необходимо, и преобразовать его в другой формат.

+0

Но я думаю, что считаю это уже в своем решении. –

+1

@Hooman: Похоже, где вы скорректировали показатель с 1000 0000 до 1000 0011, вы изменили значение от (1) 101 1000 до (1) 100 0000. Я не знаю, откуда взялось последнее значение. Правильное значение, как я показал, 0001 1011 (не подразумевается 1, оно сдвинуто вправо). –

+0

РЕШЕННЫЙ !!! Благодаря... –