11

ありがたいことに、complex型修飾子が C99 標準に導入されました。私が理解できないのは、固定小数点演算のサポートを省略することにした理由です (具体的には、1.15 {signed} や 0.32 {unsigned} などの小数型をサポートします)。これらの型は DSP プログラミングの基本となります。

GCC は拡張機能を通じてこれらをサポートしていますか?

4

3 に答える 3

11

「GCC は拡張機能を通じてこれらをサポートしていますか」という質問に対処するために、「GNU コンパイラ コレクションの使用」から引用できます (GCC バージョン 4.4.0 の場合 — 明確にするために箇条書きが追加されています)。(GCC 4.9.0 に相当する URL はFixed Point — Using the GNU Compiler Collection (GCC)ですが、セクションは 5.13 ではなく 6.15 です。)

§5.13 固定小数点型

拡張機能として、GNU C コンパイラは、ISO/IEC DTR 18037 の N1169 ドラフトで定義されている固定小数点型をサポートしています。 GCC での固定小数点型のサポートは、テクニカル レポートのドラフトが変更されるにつれて進化します。ターゲットの呼び出し規約も変更される可能性があります。すべてのターゲットが固定小数点型をサポートしているわけではありません。

固定小数点型は次のとおりです。

  • short _Fract_Fractlong _Fractlong long _Fract
  • unsigned short _Fractunsigned _Fractunsigned long _Fractunsigned 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_Accumlong _Accumlong long _Accum
  • unsigned short _Accumunsigned _Accumunsigned long _Accumunsigned 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.

固定小数点データ値には、小数部分とオプションの整数部分が含まれます。固定小数点データの形式はさまざまで、ターゲット マシンによって異なります。

草案の本文はこちらでご覧いただけます

于 2012-03-27T04:59:11.737 に答える
11

これは議論/提案されています (たとえば、N938N953 ) が、これらの論文は拡張としてのみ提案しており、主要な標準への追加ではありません。これらは、TR 18037 (「組み込みプロセッサをサポートする拡張機能」) のドラフトであるN1169に含まれているようですが、それは完全とは見なされていません (そして、ドラフトはかなりの期間更新されていないようです)その間)。

私の推測では (推測にすぎませんが)、C11 の完成に集中するために (少なくとも一時的に) 作業が中止された可能性があります。作業が今再開されるかどうかは、おそらくまだ気にかけている人が周りにいるかどうかにかかっています. 以前の論文に基づいて、より詳細をカバーし、より多くの裏付けとなる証拠を提供するなどの論文を書いて提出することは、再び動き出すのに役立つかもしれません (もちろん、何も保証することはできませんが)。

于 2012-03-27T05:02:33.440 に答える
0

カールがコメントで言ったように、固定小数点は実際には整数とまったく同じです。言語は、mult/div の後にスケーリングを行う機能を追加できたと思います (これは、VLA 型へのポインターとほぼ同じレベルになります: スケーリング演算を非表示にして構文をクリーンアップします)。さまざまな範囲のスケールと型の組み合わせ (たとえば、固定 8.24 ×固定 24.8、または固定 × 整数) の人々が固定小数点で使用したい場合、すべてをうまくカバーするのは非常に困難です。

もう一つの大きな問題は、目的の区別です。不動点は、ほとんどの場合、正確さを犠牲にして速度を向上させるためのハックです (そのため、独自のロールを作成する方がはるかに簡単です)。C99 での新しい複雑なサポートを含む浮動小数点演算は、既知のエラー範囲、偽のオーバーフローからの安全性などを使用して厳密な結果が必要な場合に使用します。C99 の複雑なサポートは、複雑な二項式を FOIL するだけではありません。 . まれなケースで結果が台無しにならないようにするために必要なすべての重労働を隠します。

于 2012-03-27T05:01:13.347 に答える