简体   繁体   English

MIPS(组合件)-如何对浮点数取整?

[英]MIPS (assembly) - how to round a float number?

Let's say I have a float number 123.4567... in $f0 register. 假设我在$ f0寄存器中有一个浮点数123.4567...。

How can I round that to 123,46 and store it to $f1 register? 如何将其四舍五入为123,46并将其存储到$ f1寄存器中?

I need a solution that also works with negative numbers: 我需要一个也可用于负数的解决方案:

-123.4567... --> -123.46 -123.4567 ...-> -123.46

edit. 编辑。 And also with integers: 还有整数:

-4.0 --> -4.0 -4.0-> -4.0

Pseudo code: 伪代码:

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

Building off of @PaulR's suggestion, you can either add +0.5 or -0.5 if it's positive or negative respectively. 在@PaulR的建议的基础上,如果正值或负值分别为+0.5-0.5则可以添加。

This can either be accomplished with a branch (for clarity): 这可以通过分支来实现(为清楚起见):

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

Or if performance is important, by masking the sign bit to get a 0.5 that's positive or negative depending on the sign of your input: 或者,如果性能很重要,可以通过屏蔽符号位来获得0.5,该值取决于输入的符号为正值或负值:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM