Floating point 浮点截断与手动舍入
我正在尝试使用32位寄存器将十进制转换为浮点整数。到目前为止,我的号码是Floating point 浮点截断与手动舍入,floating-point,floating-accuracy,Floating Point,Floating Accuracy,我正在尝试使用32位寄存器将十进制转换为浮点整数。到目前为止,我的号码是 1.11010110111100110100010011(base 2) x 2^26 现在我知道尾数只能存储2^23个比特,所以我需要显示使用舍入和不使用舍入的情况。我的问题是什么决定舍入?我知道截断会导致这种情况 1.11010110111100110100010(base 2) x 2^23 舍入是否只看右边的位,如果它等于1,则向上舍入到1,如果它等于0,则向下舍入到0 如果号码是 1.110101101111
1.11010110111100110100010011(base 2) x 2^26
现在我知道尾数只能存储2^23个比特,所以我需要显示使用舍入和不使用舍入的情况。我的问题是什么决定舍入?我知道截断会导致这种情况
1.11010110111100110100010(base 2) x 2^23
舍入是否只看右边的位,如果它等于1,则向上舍入到1,如果它等于0,则向下舍入到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
谢谢,在这个阶段,我对舍入有点不清楚。二进制数的截断和舍入工作原理与小数非常相似。理论上,您需要查看尽可能多的位来进行“正确的”舍入,但实际上大多数硬件实现使用右边的1或2位来确定是否进行舍入。舍入通常是到最接近的有效位。但如果该值正好介于这两个值之间,即,如果要删除的最高位为1,而其他位为0,则有几个所谓的平局打破规则:
- 截断(朝向0)
- 向上(朝向+无限)
- 向下(朝向-无限)
- 远离0
- 银行家四舍五入(最接近的更有效的数字)
1.11010110111100110100011111
如果要删除3位,则首先将其截断为
1.11010110111100110100011
但是因为你扔掉的比特数是111,你把它四舍五入,加上1比特,它就变成了
1.11010110111100110100100
注意,最低位011变为100提示:二进制数的截断和舍入工作原理与小数相同。我想我的问题是,当舍入时,您是否只需在舍入时从左向右看第24位位置的位?如果它是1,那么你四舍五入,如果它是0,那么留下它?或者,你是否需要在剩下的部分中查看这些信息,以确定是否需要将@Paul汇总R@floating:好的-很好的观点-理论上,你需要寻找尽可能多的位来进行“正确的”舍入,但是在实践中,大多数硬件实现使用右边的1或2位来决定是否进行取整。好的,这很有意义,非常感谢@Paul R当你用2的幂乘双倍(IEEE 794)时,没有取整。只有指数增加。