我正在尝试使用32位寄存器将十进制转换为浮点整数。我必须用手(铅笔和纸)做到这一点到目前为止,我的号码是
1.11010110111100110100010011(base 2) x 2^26
现在我知道尾数只能存储2 ^ 23个叮咬,因此我需要显示使用舍入和没有舍入的情况。我的问题是什么决定四舍五入?我知道截断会导致这个
1.11010110111100110100010(base 2) x 2^23
进行舍入只是查看右边的位,如果它等于1则向上舍入为1,如果等于零则向下舍入为0?
如果数字是
怎么办?1.11010110111100110100010111(base 2) x 2^26 where there is a one to the right?
如果2 ^ 3处的位为1且位于2 ^ 2(右侧)的位为1,则该示例为
1.11010110111100110100011111(base 2) x 2^26
谢谢,我对现阶段的四舍五入有点不清楚。
答案 0 :(得分:0)
二进制数的截断和舍入与小数的工作方式非常相似。理论上,您需要查看可用于“正确”舍入的位数,但实际上大多数硬件实现使用右侧的1或2位来确定是否向上舍入。
答案 1 :(得分:0)
舍入通常是使用最接近的更高有效数字。但是如果值恰好在这些值之间,即如果你想要摆脱的最高位是1而其他的是0,那么有几个所谓的打破平局规则:
应用哪个规则是必须定义的。 AFAIK,大多数FPU都使用银行家的舍入作为默认值。
在我们的例子中,你扔掉3个二进制数字。 000被简单地截断; 001-011总是向下舍入; 101-111总是向上舍入,100调用平局规则。如果这些规则的结果是向上舍入,则向结果添加一个最低有效位,并在必要时相应地移位。
在第一种情况下,您只需截断位,因为它们低于100,但如果这是值
1.11010110111100110100011111
并且您要删除3位,首先将其截断为
1.11010110111100110100011
但是因为你丢弃的比特是111,你向上舍入,所以你加1比特,它就变成了
1.11010110111100110100100
IOW,最低位011变为100