【问题标题】:24-bit Binary to single precision floating point number24 位二进制到单精度浮点数
【发布时间】:2019-03-30 22:19:41
【问题描述】:

我有以下 24 位二进制文​​件:

0101 0011 1111 1101 0111 1101

我需要弄清楚:

这些 24 位可以表示哪对单精度浮点(实数)数?

教科书上的例子是说把 24 位分成两个 12 位的二进制数是我应该前进的方向。

我最终会得到0101 0011 1111 & 1101 0111 1101

但是我的问题是,我的教科书只给出了 16 位和 32 位二进制数的实际工作示例。我不确定如何计算指数、尾数、特征。这一切对我来说都很新鲜。

编辑:这是教科书的摘录,指出我应该实现的目标:

例如24位的字符串:

0011 0110 0011 1001 0011 0101

转换为一对单精度浮点(实数)数 0.13672 和 -0.0004044。

0.13672 和 0.1406 之间的任何单精度浮点(实数)数都将具有相同的 12 位模式,在这台不太准确的计算机中。

对于那些对这个问题感到困惑的人:教科书如何将0011 0110 0011 1001 0011 0101 转换为 0.13672 和 -0.0004044?

【问题讨论】:

  • 一对“单精度浮点(实)数”如何用相同的 24 位表示?
  • @RudyVelthuis 我不知道哈哈,这就是我问的原因。我很困惑。我假设它是说将 24 位拆分为 2 x 12 位?

标签: floating-point binary


【解决方案1】:

将 24 位值拆分为一对 12 位字段看起来是正确的方法。对于两个 12 位字段,此处使用的浮点格式似乎是,从最左边的位开始:

  • 一个符号位(0 表示正,1 表示负)

  • 五个指数位,给出一个偏置 15 的无符号值(因此我们必须从该字段的无符号值中减去 15 才能得到实际的指数)

  • 六位有效数字给出无符号值

以这种格式表示的浮点数的绝对值将由下式给出:

significand * ( 2 ^ exponent ) / ( 2 ^ 6 )

对于给定的示例,我们有:

0011 0110 0011 =>
  sign bit       = 0, positive
  exponent field = 01101, which is decimal 13, so actual exponent = 13 - 15 = -2
  significand    = 100011, which is decimal 35

  value = positive 35 * ( 2 ^ -2 ) / ( 2 ^ 6 ) = 0.13672

1001 0011 0101 =>
  sign bit       = 1, negative
  exponent field = 00100, which is decimal 4, so actual exponent = 4 - 15 = -11
  significand    = 110101, which is decimal 53

  value = negative 53 * ( 2 ^ -11 ) / ( 2 ^ 6 ) = -0.0004044

您可以通过使用已递增 1 的有效数字重复这些计算来确认有关此格式精度的评论。

【讨论】:

  • 太棒了,谢谢!我的问题是我的教科书教我如何在 16、32 和 64 位二进制文​​件上执行此操作。你怎么知道用 5 作为指数?你能推荐更多的资源吗?
猜你喜欢
  • 2014-08-14
  • 2015-01-11
  • 2016-08-17
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多