如何使用浮点数进行舍入

时间:2012-01-24 04:12:38

标签: binary floating-point rounding

关于IEEE-754单精度浮点,你如何执行舍入到最近,其中四舍五入到所需位置的最接近的偶数位(默认值和最常见的模式)?

基本上我有保护位,圆位和粘滞位。 因此,如果我们将它们组成一个向量并将其称为GRS,则适用以下规则:

  1. 如果G = 0,向下舍入(不做任何事)
  2. 如果G = 1RS == 10RS == 01,向上舍入(在尾数中添加一个)
  3. if GSR = 111,round to even
  4. 所以我不知道如何进行最接近的回合。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:32)

为确保我们位于同一页面上,G是三者中最重要的一部分,R接下来,S可被认为是最不重要的bit,因为它的值部分代表在计算中被截断的更低有效位。这三个位仅在进行计算时使用,并且在计算之前或之后不存储在浮点变量中。

为了使用GRS将结果四舍五入到最接近的偶数,您应该这样做:

GRS - 行动
0xx - 向下舍入=什么都不做(x表示任何位值,0或1)
100 - 这是平局:如果 G 之前的尾数位为1,则向上舍入,否则向下舍入=不执行任何操作 101 - 向上舍入 110 - 向上舍入 111 - 向上舍入

通过在G之前的尾数最低有效位位置将尾数加1来完成舍入。如果尾数溢出(它将存储的23个最低有效位变为零),则必须向指数加1。如果指数溢出,则根据数字的符号将数字设置为+无穷大或无穷大。

在平局的情况下,如果尾数为奇数,则在尾数中加1,如果是偶数则不加任何东西。这就是使结果四舍五入到最接近的偶数值的原因。

答案 1 :(得分:5)

只是想补充一点 S 位不仅仅是跟在 GR 位之后。如果在 GRS 位之后有位可用,则它实际上是逻辑 OR ,包括 S 位。
换句话说,如果 GR 1 之后有任何位,那么 S 位值将 1

答案 2 :(得分:0)

当您的一组位比要保持的精度低时,请考虑以下四舍五入:

  1. 如果保留的最低有效位为0,则将0x7ff .... f添加到舍入位。
  2. 如果您保留的最低有效位为1,则将0x800 .... 0添加到舍入位。

我认为这只需执行一次测试即可实现所需的行为。