假設我在$ f0寄存器中有一個浮點數123.4567 ...。MIPS(彙編) - 如何舍入浮點數?
我怎樣才能將它轉換爲123,46並將其存儲到$ f1寄存器?
我需要一個解決方案,也可用於負數:
-123.4567 ... - > -123.46
編輯。並且還帶有整數:
-4.0 - > -4.0
假設我在$ f0寄存器中有一個浮點數123.4567 ...。MIPS(彙編) - 如何舍入浮點數?
我怎樣才能將它轉換爲123,46並將其存儲到$ f1寄存器?
我需要一個解決方案,也可用於負數:
-123.4567 ... - > -123.46
編輯。並且還帶有整數:
-4.0 - > -4.0
僞代碼:
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
大廈關閉@ 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
^如果你試圖把例如-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
@Mike:謝謝,是的,我的回答是隻適用於正值 - 我現在更新了它,以便它對負值也起作用。 –