【问题标题】:Maximum bit-width to store a summation of M n-bit binary numbers存储 M n 位二进制数总和的最大位宽
【发布时间】:2017-06-14 01:53:20
【问题描述】:

我正在尝试找到计算包含 M 个 n 位无符号二进制数之和所需的最大位宽的公式。谢谢!

【问题讨论】:

  • 好吧,如果我添加两个一位数字,它最多可以占用两位。如果我添加两个两位数,最坏的情况可能需要三位进行翻转。如果我添加两个三位数字,最坏的情况需要四个......
  • 如果我将 1111 与 1 和 1 相加,4 位和 1 位,结果需要 5 位。与十进制没有什么不同,两个一位数可以需要两位数的结果,依此类推。

标签: verilog hardware fpga hdl


【解决方案1】:

所需的最大位宽应为ceil(log_2(M * (2^n - 1)))

编辑:感谢@MBurnham,我现在意识到应该改为floor(log_2(M * (2^n - 1))) + 1

【讨论】:

  • 嗯...我用 wolfram alpha 对这两个公式进行了实验性测试...似乎还有什么不对...
  • @bfung Off 怎么样?
  • 例如,对于 M = 9 和 n = 3,您建议的公式给出 7。当我在 wolfram alpha 中添加 0b111 9 次时,答案 = 6b111111。
  • @bfung 对于 M=9 和 n=3,我得到 6:(link)
  • 请原谅,我的括号已关闭。非常感谢!
【解决方案2】:

假设为正整数,您需要 floor(log2(x)) + 1 位来存储 x。并且 m n 位数字的总和可以产生的最大值是 m * 2^n。 所以我认为公式应该是

floor(log2(m * 2^n)) + 1

位。

【讨论】:

  • 最大的n位数是2^n-1,不是2^n
  • @mbschenkel 对于只有 1 个数字,你是正确的,但是当你有两个数字的总和时,你可以将值转移到下一个数字。所以你需要为结转存储额外的一点
  • 您已经使用m 来处理这个问题。如果B=2^n-1 是1 的最大可能值,那么m * Bm 求和的最大可能总和,而不是m * (B + 1)
【解决方案3】:

如果我添加 2 个数字,我需要比 2 个数字中的较大者多 1 位来存储结果。所以,如果我添加 2 个 n 位数,我需要 n+1 位来存储结果。

if I add another n-bit number, I need (n+1)+1         bits to store the result (that's 3 n-bit numbers added so far)
if I add another n-bit number, I need ((n+1)+1)+1     bits to store the result (that's 4 n-bit numbers added so far)
if I add another n-bit number, I need (((n+1)+1)+1)+1 bits to store the result (that's 5 n-bit numbers added so far)

所以,我认为你的公式是

n + M - 1

【讨论】:

  • 这是一个上限,但不一定是所需的最小值(尽管 OP 要求最大值...)。将两个数字相加时,不要使用完整范围:例如 1+1=10,而不是 11,1+1+1=11 并且根本不使用第 3 位。这对于二进制补码负数是不同的。
猜你喜欢
  • 2015-01-16
  • 2014-10-24
  • 2014-11-08
  • 1970-01-01
  • 2021-06-13
  • 2015-03-23
  • 2010-10-26
  • 2017-12-02
  • 1970-01-01
相关资源
最近更新 更多