2012-05-05 119 views
1

假設我在$ f0寄存器中有一個浮點數123.4567 ...。MIPS(彙編) - 如何舍入浮點數?

我怎樣才能將它轉換爲123,46並將其存儲到$ f1寄存器?

我需要一個解決方案,也可用於負數:

-123.4567 ... - > -123.46

編輯。並且還帶有整數:

-4.0 - > -4.0

回答

4

僞代碼:

Multiply by 100.0 
If sign is positive 
    Add 0.5 
Else 
    Subtract 0.5 
Convert to integer 
Convert back to float 
Divide by 100.0 
+0

^如果你試圖把例如-4.0那一個不工作: -4.0 * 100 = -400.0 -400.0 + 0.5 = -399.5 INT(-399.5)= -399 浮動(-399)= -399.0 -399,0/100.0 = -3.99 所以-​​4,0被四捨五入爲-3.99 – Mike

+0

@Mike:謝謝,是的,我的回答是隻適用於正值 - 我現在更新了它,以便它對負值也起作用。 –

1

大廈關閉@ PaulR的建議,你可以添加+0.5-0.5如果它分別是正或負。

這既可以用(爲清楚起見)的一個分支來實現:

Multiply by 100.0 
if num >= 0 
    Add 0.5 
else 
    Add -0.5 
Convert to integer 
Convert back to float 
Divide by 100.0 

或者,如果性能是很重要的,通過屏蔽符號位獲得0.5這是正面或負面的取決於你輸入的符號:

Multiply by 100.0 
$f2 = $f0 & (0x80000000 | 0.5)) 
$f0 += $f2 
Convert to integer 
Convert back to float 
Divide by 100.0