[英]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.