Floating point 浮点截断与手动舍入

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

我正在尝试使用32位寄存器将十进制转换为浮点整数。到目前为止,我的号码是

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
  • 银行家四舍五入(最接近的更有效的数字)
应用哪条规则是必须定义的。此外,大多数FPU使用银行家四舍五入作为默认值

在我们的例子中,你扔掉3个二进制数字。000被简单地截断;001-011始终向下取整;101-111总是四舍五入,100调用打破平局规则。如果这些规则的结果是四舍五入,则向结果中添加一个最低有效位,并在必要时进行相应的移位

在第一种情况下,您只需截断位,因为它们低于100,但如果这是值

1.11010110111100110100011111
如果要删除3位,则首先将其截断为

1.11010110111100110100011
但是因为你扔掉的比特数是111,你把它四舍五入,加上1比特,它就变成了

1.11010110111100110100100

注意,最低位011变为100

提示:二进制数的截断和舍入工作原理与小数相同。我想我的问题是,当舍入时,您是否只需在舍入时从左向右看第24位位置的位?如果它是1,那么你四舍五入,如果它是0,那么留下它?或者,你是否需要在剩下的部分中查看这些信息,以确定是否需要将@Paul汇总R@floating:好的-很好的观点-理论上,你需要寻找尽可能多的位来进行“正确的”舍入,但是在实践中,大多数硬件实现使用右边的1或2位来决定是否进行取整。好的,这很有意义,非常感谢@Paul R当你用2的幂乘双倍(IEEE 794)时,没有取整。只有指数增加。