值得庆幸的是,complex
类型修饰符已引入C99标准。我不明白为什么决定省略对定点运算的支持(特别是支持分数类型,如1.15 {signed}或0.32 {unsigned}),这些类型对于DSP编程是如此基础?
GCC是否通过扩展支持这些?
答案 0 :(得分:9)
为了解决“GCC是否通过扩展支持这些问题”的问题,我们可以引用“使用GNU编译器集合”(对于GCC版本4.4.0 - 添加的要点澄清)。 (GCC 4.9.0 URL等效项为Fixed Point — Using the GNU Compiler Collection (GCC),但该部分为6.15而不是5.13。)
§5.13定点类型
作为扩展,GNU C编译器支持N1169中定义的定点类型 ISO / IEC DTR 18037草案。对GCC中定点类型的支持将随之发展 技术报告草案的变更。任何目标的调用约定也可能会发生变化。不 所有目标都支持定点类型。
定点类型是:
short _Fract
,_Fract
,long _Fract
,long long _Fract
,unsigned short _Fract
,unsigned _Fract
,unsigned long _Fract
,unsigned long long _Fract
,_Sat short _Fract
,_Sat _Fract
,_Sat long _Fract
,_Sat long long _Fract
,_Sat unsigned short _Fract
,_Sat unsigned _Fract
,_Sat unsigned long _Fract
,_Sat unsigned long long _Fract
,short _Accum
,_Accum
,long _Accum
,long long _Accum
,unsigned short _Accum
,unsigned _Accum
,unsigned long _Accum
,unsigned long long _Accum
,_Sat short _Accum
,_Sat _Accum
,_Sat long _Accum
,_Sat long long _Accum
,_Sat unsigned short _Accum
,_Sat unsigned _Accum
,_Sat unsigned long _Accum
,_Sat unsigned long long _Accum
。定点数据值包含小数和可选的整数部分。格式 定点数据各不相同,取决于目标机器。
您可以找到提案草案here的文字。
答案 1 :(得分:9)
已经讨论/提议(例如,在N938,N953),但这些文件只是将其作为扩展而不是主要标准的补充。这些似乎导致它被包含在N1169中,这是TR 18037的草案(“支持嵌入式处理器的扩展”),但这不被认为是完整的(草案似乎没有在相当长的一段时间内更新)。
我的猜测(尽管这只是一个猜测)是它的工作可能会被放弃(至少暂时)以集中精力完成C11。现在恢复工作是否可能取决于是否还有人仍然关心。根据那些涵盖更多细节的早期文章撰写和提交论文,提供更多支持性证据等,可能有助于重新启动它(尽管我显然不能保证任何事情)。
答案 2 :(得分:0)
另一个主要问题是目的的区分。固定点几乎总是以牺牲正确性为代价来破解速度(因此滚动自己更容易)。浮点运算,包括C99中的新复杂支持,适用于需要具有已知误差范围的严格结果,虚假溢出安全等等.C99复杂支持为您做的不仅仅是为您复制二进制代码。它隐藏了所有繁重的工作,以确保你的结果不会因极端情况而被破坏。