【问题标题】:How much have xxx precision binary fixed point representation?xxx 精度二进制定点表示有多少?
【发布时间】:2015-01-27 04:09:54
【问题描述】:

当我转换为二进制定点表示方式时,我试图测量有多少准确度。 首先我尝试使用这个 0.9375。我得到了二进制 0.1111。 第二次我尝试使用这个 0.9377,我也得到了二进制 0.1111

它们之间没有什么不同。

另外,我该如何解决这个问题? 还有其他方法吗?进行转换?

为了你的理解,我让我知道更多的例子, 例如,如果我想将 3.575 转换为二进制,那么 3.575 就是 11.1001。 但如果我再次回到十进制,那么 3.5625。原价相差太大了。

【问题讨论】:

  • 你的问题没有意义。您预期的输入和输出是什么?
  • 我们从您的描述中一无所获...
  • 你如何输入像3.575这样的数字?你说你在使用 Verilog 对吗?
  • 我认为这是stackoverflow.com/a/27765266/97073 的副本,忽略标题是关于浮点的它关于定点的。并解释它是如何工作的。

标签: verilog


【解决方案1】:

来自similar question 我们有:

Base 2:二进制补码 4 整数,4 位小数

-2^3  2^2  2^1  2^0  .  2^-1    2^-2    2^-3    2^-4
  -8    4    2    1  .   0.5    0.25   0.125  0.0625

只有 4 个小数位,表示的数字只有 0.0625 的精度

3.575 could be 11.1001 = 2+ 1+ 0.5 + 0.0625 => 3.5625 to low
      or       11.1010 = 2+ 1+ 0.5 + 0.125  => 3.625  to high

这应该表明 4 位不足以准确表示“3.5​​75”。

要计算出需要多少位乘以 2 的幂,直到得到一个整数:对于“3.575”,它相当多(50 个小数位)。

3.575 * 2^2   = 14.3 (not integer)
3.575 * 2^20  = 3748659.2
3.575 * 2^30  = 3838627020.8
3.575 * 2^40  = 3930754069299.2 (not integer)
3.575 * 2^50  = 4025092166962381.0 (INTEGER) we need 50 bits!

3.575 => 11.10010011001100110011001100110011001100110011001101

乘以 2 的幂将单词向左移动 (<<) 当没有剩余小数位时,表示该数字已完全表示,则移位数是所需的小数位数。

对于定点,您最好考虑应用程序所需的精度级别。

【讨论】:

  • 再次感谢你,莫干。
  • 先生,这是您上述回答中的另一个问题。对于 3.75,几乎需要 50 个小数位。但是,我想知道与我接下来要介绍的内容相比,它的效率如何。我使用这种方式,首先 3.75>1024。当然,这种方式有一点误差(精度)最后一个数字是多少。但是,就面积和速度而言,这种方式不是第一种方式。但我想听听你的意见
  • @JamJI。 Verilog 没有定点类型,因此您必须移位以添加小数位。但是该数字将存储为整数。如果您右移 (>>1024),您将丢弃小数位。您需要的精度确实取决于应用程序。如果您可以用更少的小数位获得所需的性能,那么它会更容易合成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
相关资源
最近更新 更多