gpt4 book ai didi

floating-point - 尾数有效位

转载 作者:行者123 更新时间:2023-12-05 00:57:16 24 4
gpt4 key购买 nike

我只是对尾数位有点困惑。

在我的练习考试中,我被要求将十进制转换为 float 。根据 1 个符号位、4 个 exp 位和 5 个尾数位工作,根据我们的答案键,数字 132 表示如下:

0 1110 00001

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

既然我只为尾数分配了 5 位,这是否意味着我们只计算最左边的 5 位,然后丢弃任何内容?

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

最佳答案

解码浮点表示

在表示 float 的位 0 1110 00001 中:

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

这些位被解释:

  • 符号位 s 用于 (−1)s 以给出符号。对于 0,(-1)0 = +1,所以表示的数字是正数。
  • 指数字段e通过减去一个偏差来调整以给出实际指数。这个问题没有说明偏差使用什么,但我们可以认为它是 7,因为这就是 IEEE-754 模式的值。对于指数字段 1110,它是 14 的二进制,实际指数是 14−7 = 7。这意味着表示的数字将按 27 缩放。
  • 只要指数字段不是全零或全一,有效数字字段 f 会通过写入“1.”来解释,附加有效数字字段的位,并将其解释为二进制数字。2 对于位 00001,我们有 1.00001,即 1 + 1/32。这是有效数字F
  • 全部加起来,表示的数字是(-1)s • 2e-7 • < em>F = +1 • 27 • (1 + 1/32) = 128 • (1 + 1/32) = 128 + 4 = 132。

对浮点表示进行编码

要对 00000101 进行编码,我们不会从给定的第一位开始。我们找到第一个有效数字,对于二进制来说,它是第一个 1 位。在 00000101 中,第一个 1 位在位置 2(对应值 22)。然后,为了形成有效数字,我们从那里取 位,而不是五位。有效位 field 是 5 位,而 significand 是 6 位,因为对于正常范围内的数字,它包括通过指数字段编码的前一位.在 00000101 中,我们需要的六位有效数是 101000。后三位是隐含的。所以有效数字是 1.01000。

为了编码这个正数,指数为2,有效位为1.01000,我们使用0作为符号位,2+7作为指数域,01000作为有效位域,所以编码是0 1001 01000.

如果数字的前六位有效数字后有非零位,则无法以这种浮点格式表示实际数字。在这种情况下,我们可以声明一个无法完成转换的错误,或者我们可以将数字四舍五入到最接近的可表示值。大多数情况下,四舍五入是通过将数字四舍五入到最接近的可表示值来完成的——如果在有效数字后面的位以 0 开头,则向下舍入。如果它们以 1 开头并且在某处至少包含一个 1,则四舍五入。如果它们以 1 开头,之后的所有数字都为零,则该数字介于两个可表示值之间,通常的规则是选择具有偶数低位的可表示值(使有效数的最后一位为 0)。

脚注

1 “有效位”是 float 小数部分(相对于指数或符号)的首选术语。 “尾数”是对数小数部分的旧术语。尾数是对数的;添加到尾数乘以表示的数字。有效数字是线性的;乘以有效数字乘以表示的数字。

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

关于floating-point - 尾数有效位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60594962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com