问题描述
我正在做一项作业,其中第一个任务集是计算两个矩阵的差值的 frobeneous 范数(平方和)。我正在尝试使用单精度浮点数来执行此操作,但是在对浮点数求平方时得到了一些奇怪的结果。这发生在第 276 行的 frobeneousnorm
标签中。例如,我已将差分矩阵的第一个索引的值加载到我的 $t3
寄存器中(应该约为 8060928)。然后我使用 mtc1 $t3 $f4
将该值转换为单精度浮点数,当检查寄存器时,它在 1.1295766E-38
中存储一个值 $f4
。然后我使用 mul.s $f7 $f4 $f4
将浮点值乘以自身。但是,当我之后检查 $f7
中的值时,它读取为 $f7 0.0
。我不太确定这里出了什么问题,任何帮助将不胜感激。我已经发布了下面的代码片段,并注意注释是一个签名,其中 $a0
保存差分矩阵(每个字节都是一个新索引的浮点数),$a1
是差分矩阵(在本例中为 64,因此是 4096 个 64 x 64 的索引矩阵)。
# Todo: float frobeneousnorm( float* A,int N )
frobeneousnorm: la $t0 ($a0)
move $t1 $a1
mul $t1 $t1 $t1
li $t2 0
li $t3 0
li $t4 0
li $t5 0
mtc1 $zero $f6
mtc1 $zero $f7
frobLoop: beq $t2 $t1 frobLeave
lw $t3 ($t0)
mtc1 $t3 $f4
mul.s $f7 $f4 $f4
add.s $f6 $f6 $f7
addi $t0 $t0 4
addi $t2 $t2 1
j frobLoop
frobLeave: sqrt.s $f0 $f6
jr $ra
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)