【问题标题】:How to add fixed point with two's complement fixed point?如何用二进制补码固定点添加固定点?
【发布时间】:2019-01-17 18:10:05
【问题描述】:

我想将无符号整数 5432 乘以 0.01,然后加/减 0.3。我不想使用浮点数,而是想使用定点算术。这是我的步骤:

1) ((1 固定点 Q0.16

2) 655 * 5432 = 3557960 => 定点 Q16.16

3) ((1 不动点 Q0.16

4) 添加 0.3:3557960 + 19660 = 3577620 => 转换为浮点 = 54.59,这与使用浮点计算几乎相同:5432 * 0.01 + 0.3 = 54.62

5) 减去 0.3:找到 19660 => 45876 的补码,现在是 3577620 + 45876 = 3623496 => 55.29,这与预期不符 5432 * 0.01 - 0.3 = 54.02

谁能验证我在第 1-4 点中是否正确,以及我在第 5 点中遗漏了什么?

【问题讨论】:

    标签: math twos-complement fixed-point


    【解决方案1】:

    您的错误是您假设 2-complement 表示与字长无关。它不是。 19660 的 16 位到 2 补码是 2^16 - 1966045876,但由于您使用的是 32 位数字,因此您需要相应的 2 补码,即 2^32 - 199604294947636。换句话说,当您将 2 补码从 16 位扩展到 32 位时,您应该用符号位填充顶部字节,即 1 用于负值。您可以看到,在二进制中,在这种扩展下,这两个值实际上是相同的:

    45876      =                   10110011_00110100 (16-bit binary)
    4294947636 = 11111111_11111111_10110011_00110100 (32-bit binary)
    

    如果您添加 3557960 + 4294947636,您将得到 4298505596,或者如果您将其截断为 32 位值 - 3538300,它是 53,99 的定点表示

    【讨论】:

    • 太棒了!这是有道理的。
    猜你喜欢
    • 2019-01-11
    • 2015-08-30
    • 2015-04-07
    • 2016-08-30
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多