MIPS将一个int乘以一个浮点数,得到错误的答案

时间:2014-04-23 01:19:52

标签: mips

当我运行程序并输入20度时,输出在MARS中为8.8E-44,在QtSpim中为0.000000。它应该是62.8

我在这里使用了错误的说明吗?

.data
pi:     .float   3.14
c:      .word   180
initMSG: .asciiz "\nEnter an angle in degrees: "

.text
.globl main

main:
    mul $t5, $t2, $t6
add $t5, $t5, $sp
addi    $t5, $t5, 4
lw  $t9, 0($t5)

mul $t4, $t1, $t6
add $t4, $t4, $a0
sw  $t9, 0($t4)

addi    $t2, $t2, 1

addi    $t1, $t1, 1
j   forLoop3


Exit:
li $v0, 10          #load the system exit command 
syscall             #stop the program

1 个答案:

答案 0 :(得分:1)

问题是pi是一个浮点数,但是你从用户那里获得的值是一个普通的整数。在将用户的值乘以pi之前,您需要将用户的值转换为浮点值。

幸运的是,您不必手动转换它,因为有一个用于读取浮点数而不是整数的系统调用。将读取系统调用从5更改为6(6表示读取浮点数),并删除后续的两行(系统调用6将直接将浮点读入$f0)。在这样做并使用20度再次运行之后,我得到62.800003作为输出(将会有少量错误,因为3.14无法使用二进制浮点数精确表示)。