![](/img/trans.png)
[英]Why don't the authors of the C99 standard specify a standard for the size of floating point types?
[英]Why aren't fixed-point types included in C99?
值得慶幸的是, complex
類型修飾符被引入C99標准。 我不明白為什么決定省略對定點運算的支持(特別是支持分數類型,如1.15 {signed}或0.32 {unsigned}),這些類型對於DSP編程是如此重要?
GCC是否通過擴展支持這些?
為了解決“GCC是否通過擴展支持這些問題”的問題,我們可以引用“使用GNU編譯器集合”(對於GCC版本4.4.0 - 添加的要點澄清)。 (GCC 4.9.0 URL等效於固定點 - 使用GNU編譯器集合(GCC) ,但該部分是6.15而不是5.13。)
§5.13定點類型
作為擴展,GNU C編譯器支持ISO / IEC DTR 18037的N1169草案中定義的定點類型。隨着技術報告草案的變化,對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
。定點數據值包含小數和可選的整數部分。 定點數據的格式各不相同,取決於目標機器。
您可以在此處找到提案草案的文本。
就像卡爾在評論中所說的那樣,定點與整數完全相同。 我想這個語言可以在mult / div之后添加一個功能來為你做縮放(這與指向VLA類型的指針大致相同:通過隱藏縮放算法來清理語法)但考慮到各種各樣的尺度和類型的混合(例如固定8.24倍固定24.8,或固定時間整數)人們想要使用定點,很難完全覆蓋它。
另一個主要問題是目的的區分。 固定點幾乎總是以犧牲正確性為代價來破解速度(因此滾動自己更容易)。 浮點運算,包括C99中的新復雜支持,適用於需要具有已知誤差范圍的嚴格結果,虛假溢出安全等等.C99復雜支持為您做的不僅僅是為您復制二進制代碼。 它隱藏了所有繁重的工作,以確保您的結果不會被角落案件破壞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.