2014-10-22 4 views
0

Я должен умножить число с плавающей запятой (с форматом IEEE 754) на 2 без использования команд с плавающей запятой.Умножение номера IEEE-754 с плавающей запятой в MIPS

У меня возникают проблемы с фиксацией экспоненциальной части после умножения.

Это то, что у меня есть.

Предположим одного точности с плавающей запятой в регистре $ t0

sll $t1, $t0, 9  t1 holds fraction part 
sll $t2, $t0, 1 
srl $t2, $t2, 24  t2 holds exponent part 
srl $t3, $t0, 31  t3 holds the sign bit 

sll $t1, $t1, 1  multiply fraction by 2 
#do something to exponent in $t2 ## 

#now put it all back together 
sll $t3, $t3, 31  put sign bit in the 31nd bit position 
sll $t2, $t2, 23  put exponent in the 30-23 bit positions 
srl $t1, $t1, 9  put fraction in the 22-0 bit positions 

or  $t4, $t1, $t2 
or  $t4, $t4, $t3  t4 now holds the value of t0*2 

Я не понимаю, как показатель изменится, если я умноженной на дробь на 2.

ответ

1

Вы здесь делается неправильная вещь

sll $t1, $t1, 1  multiply fraction by 2 

IEEE-754 с плавающей запятой nu Значение mber основано на этой формуле

(-1)^sign * 1.mantissa * 2^exponent 

Когда умножить на 2, только точка Radix перемещается вправо, все биты остаются неизменными, так что мантисса часть является таким же, как и раньше. Для того, чтобы умножить на 2, вы увеличиваете показатель на 1, а не умножить его на 2, потому что 2*2^exp = 2^(exp+1)

Так что вы должны сделать, как этот

addi $t2, $t2, 1 
+0

так, если я хочу, чтобы умножить $ t0 на 2 мне просто нужно извлечь биты экспоненты и добавить один к нему? затем добавить новый экспонент обратно в $ t0? – jean

+0

Да. Но не забудьте проверить угловые случаи, такие как NaN или Inf ... –

+0

да, например, exponent = 1111 1111 или 0000 0000? – jean

Смежные вопросы