2012-05-05 24 views
1

$ f0レジスタに浮動小数点数123.4567 ...があるとします。MIPS(アセンブリ) - 浮動小数点数を丸める方法?

は、どのように私は123,46にそのラウンドし、$ F1レジスタにそれを格納することができますか? > -123.46

編集 - ...

-123.4567:

は、私はまた、負の数で動作するソリューションが必要です。そしてまた、整数で:

-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ラウンドしようとすると、1が機能しないこと: -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

@マイクに丸めます:おかげで、はい、私の答えは、正の値に対してのみ有効でした - 負の値でも機能するように更新しました。 –

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 
関連する問題