У меня возникла эта проблема. Я должен решить, где мне нужно умножить число чисел с плавающей запятой (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.
Является ли это правильно?
Заранее благодарен!
Невозможно понять, что вы делаете из линии '(2^9 * b) * (2^11 * b) = 2^9 + 11 * (a * b) + 2^20 * (а * б) '. Вам не нужно выравнивать экспоненты для умножения: это то, что вы делаете, чтобы выровнять значения для ** сложения ** и ** вычитания **. –
При выполнении такого рода работ я настоятельно рекомендую получить или записать конвертер из формата с плавающей запятой в десятичные числа. Это делает проверку намного проще. –