Mantissa有效位

问题描述 投票:2回答:2

我只是对尾数位感到困惑。

在我的执业考试中,我被要求将小数转换为浮点数。按照1个符号位,4个exp位和5个尾数位的工作方式,根据我们的答案键,数字132在下面表示为:

0 1110 00001

对于上面的表示,我的实际尾数为0000100。

由于我只给5个尾数位,这是否意味着我们只计算了最左边的5个位,然后舍弃了什么?

例如,如果我有0000101代表其他数字,我是否会丢弃最后两位,但仍为00001?谢谢!

floating-point binary floating-accuracy
2个回答
2
投票

解码浮点表示形式

在代表浮点数的位0 1110 00001中:

  • 0是符号位s
  • 1110是指数字段e。 (这不是指数;它是指数的编码。)
  • 00001是有效数字1字段f。 (这不是有效数字;它是有效数字的编码。)

这些位被解释:

  • 符号位s用于(-1)s中以给出符号。对于0,(-1)0 = +1,因此表示的数字为正。
  • 指数字段e通过减去偏差来调整以提供实际指数。该问题并未说明该对偏差使用什么,但我们可以将其确定为7,因为IEEE-754模式将是7。对于14的二进制的指数字段1110,实际指数为14-7 =7。这意味着表示的数字将按2 7进行缩放。
  • 只要指数字段不是全零或全为零,就通过写“ 1.”,将有效字段的位附加并解释为二进制数字来解释有效域f
  • 。 [2对于位00001,我们有1.00001,即1 + 1/32。这是有效位F总共,表示的数字是(-1)
  • s
  • •2 e-7F = +1•2 7] >•((1 + 1/32)= 128•(1 + 1/32)= 128 + 4 = 132。编码浮点表示形式

    要编码00000101,我们不从给定的第一位开始。我们找到第一个有效数字,对于二进制,它是第一个1位。在00000101中,第一个1位位于位置2(对应于值2

    2

)。然后,为了形成有效位数,我们从那里取six位,而不是5位。有效数field是五位,但是significand是六位,因为对于正常范围内的数字,它包括一个通过指数字段编码的前导一位。在00000101中,有效位数所需的六位是101000。后三位是隐式的。因此有效位数为1.01000。要对该数字进行编码,该数字为正,具有指数2,并且具有有效数1.01000,我们将0用作符号位,将2 + 7用作指数字段,并将01000用作有效位数,因此编码为0 1001 01000 。

如果数字的前六个有效数字后有非零位,则不能以此浮点格式表示实际数字。在那种情况下,我们可以声明无法进行转换的错误,也可以将数字四舍五入到最接近的可表示值。通常,四舍五入是通过将数字四舍五入到最接近的可表示值来进行的-如果有效位数后的位以0开头,则向下舍入。如果它们以1开头,并且在某处至少包含1个,则向上取整。如果它们以1开头,并且所有数字都为零,则该数字位于两个可表示值的中间,通常的规则是选择具有偶数低位的可表示值(使有效数字的最后一位为0)。] >

脚注

1

“有效位数”是浮点数小数部分(相对于指数或符号)的首选术语。 “ Mantissa”是对数的小数部分的旧术语。尾数是对数的;在尾数上加上表示的数字。有效位数是线性的;乘以有效位数再乘以表示的数字。

2如果指数字段e全为零,则它表示1减去偏差的指数,有效位数被解释为“ 0”。后跟字段的位,而不是“ 1”。

如果尾数不适合为其保留的空间,则必须四舍五入。

https://www.doc.ic.ac.uk/~eedwards/compsys/float/

您可以使用此方法进行舍入处理,

How to perform round to even with floating point numbers


1
投票
如果尾数不适合为其保留的空间,则必须四舍五入。

https://www.doc.ic.ac.uk/~eedwards/compsys/float/

© www.soinside.com 2019 - 2024. All rights reserved.