2016-08-24 1 views
0

Je dois multiplier et imprimer deux nombres à virgule flottante à double précision, mon code est le suivant:produit de nombres à virgule flottante

li $v0, 7  # $v0 =7  
syscall   # run read_double 
jal p4   # run println 

mfc1 $v0, $f4  # $v0 = $f4 

li.d $f2, 4.3934567 
mul.d $f0, $f4, $f2 
mov.d $f12, $f0  # $f12 = $f6 


li $v0, 3  # $v0 =3 
syscall   # run print_double 
jal p4   # run println 
jr $ra 

Tout le monde sait pourquoi ce code renvoie toujours 0?

+0

est 'f4' de $ déjà attribué une valeur? 'li.d $ f2, 4.3934567' est défini mais je ne vois pas' $ f4'. –

+0

oui, désolé, je n'ai pas copié tout le code parce qu'il était trop long, mais $ f4 est rempli à partir de la ligne d'entrée dans – robertina

+0

maintenant je viens de copier tout le code – robertina

Répondre

1

Comme je l'ai mentionné dans mon commentaire, l'appel système 7 renvoie le résultat dans le registre à virgule flottante $f0. Donc, votre code pourrait être simplifed à:

li $v0, 7  # $v0 =7  
syscall   # run read_double 

li.d $f2, 4.3934567 
mul.d $f12, $f0, $f2 # multiply user input by $f2. put the result in $f12 
         # for easy printing. 
+0

tout est clair, mais, par exemple, si je chiffre un int comme 1, il renvoie 4 .. ou si je chiffre 1,1 il me renvoie 4,40000000000000036 au lieu de 4,83280237. Savez-vous ce que cela pourrait être? – robertina

+0

Cela ne correspond pas à mes résultats. Si j'entre 1 en tant qu'entrée, j'obtiens 4.3934566999999998 comme sortie. J'utilise PCSpim, pas QtSpim, au cas où cela serait important. – Michael

+0

ok, je vais essayer avec PCSpim, merci beaucoup! – robertina