【问题标题】:Differentiating various Qx fixed-point types?区分各种 Qx 定点类型?
【发布时间】:2017-06-19 07:35:12
【问题描述】:

您如何区分代码中的各种 Qx 定点类型?

这样的事情可以接受吗:

typedef int32_t q31;
typedef int32_t q25;
typedef int32_t q23;
typedef int32_t q15;

然后(使用示例):

q23 x;
q23 y;
q31 out;
.
.
.    
out = do_something_input_q23s_output_q31(x,y);
// etc.

上面的 typedef 有意义吗?什么是最合适的解决方案?

【问题讨论】:

  • 并非如此 - 您不能在 32 位浮点数中指定超过 6 位小数。您在创建定点库吗?
  • 抱歉,没听懂。
  • 你想要多少类型的安全性?如果很多,您可以将类型包装到结构中,但代价是更笨拙的使用。 int32_t 上的简单 typedef 不会为您购买任何编译时检查。在这种情况下,您可能会从匈牙利符号 described here 中受益更多。
  • 是的,您会使用前缀更容易看到可能的错误。并且不要忘记转换函数int q25New = q25Fromq23(q23Old);。但我会考虑使用比q23 更具描述性的名称。
  • 请注意,如果您确实使用匈牙利表示法,那些typedefs 不一定是坏的,即使您没有得到太多编译器帮助。在不了解您的用例全貌的情况下,不可能给出一个真正的解决方案。

标签: c signal-processing fixed-point


【解决方案1】:

您可以将每个定点整数包装在一个结构中,这将使编译器强制执行该类型。我不知道这对性能有何影响。

我想您可以使用预处理器魔法将实现切换为裸整数以进行发布。

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2012-01-11
    • 2015-10-18
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2015-03-26
    • 2016-04-03
    • 2010-09-24
    相关资源
    最近更新 更多