MIPS, неожиданный (нехватка) результат от add.s - PullRequest
0 голосов
/ 23 марта 2020

После запуска следующего кода на MIPS я ожидал бы, что $ f0 будет содержать 0x7f800001, но он останется 0x7f800000. Я неправильно понимаю, как работает float? Нужно ли использовать двойную точность в этом случае? Я был бы признателен, если бы кто-нибудь объяснил мне, почему это не дает ожидаемого результата и как я могу получить ожидаемый результат.

li $t0, 0x7f800000
mtc1 $t0, $f0

li $t1, 1
mtc1 $t1, $f1

add.s $f0, $f0, $f1

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

0x7f800000 представляет одинарную точность + INF. Добавление к нему любого значения, кроме NaN или отрицательного числа (?), Приведет к + INF.

0x7f800001 - одно из многих представлений NaN.

1 голос
/ 23 марта 2020

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

  cvt.s.w $f0, $f0
  cvt.s.w $f1, $f1
...