2013-02-17 86 views
4

gcc docs describe描述了最近GCC中的有限十進制浮點支持。如何在GCC中打印/轉換十進制浮點值?

但我該如何使用它?

例如在Fedora 18上,GCC 4.7.2。

一個簡單的C程序一樣

int main() 
{ 
    _Decimal64 x = 0.10dd; 
    return 0; 
} 

編譯(使用-std = gnu99時) - 但實際上,我怎麼做其他有用的東西 - 就像打印_Decimal64值或將字符串轉換爲_Decimal64值?

該文檔討論關於(我假設)像printf這樣的事情的'單獨的C庫實現' - 我必須使用哪個額外的庫 - 說 - 打印十進制浮點計算的結果?

我已經試過

沒有工作
printf("%Df\n", x); 

- printf的剛生產出來的:%Df

+1

http://sourceware.org/bugzilla/show_bug.cgi?id=11475似乎相關 – Mat 2013-02-17 18:14:10

回答

5

正如文檔所說,GCC不提供I/O,因爲printf等由libc而不是GCC提供。

IBM對GNU C庫libdfp進行了擴展,它增加了printf鉤子以使Decimal I/O工作。我沒有用它,但你應該能夠得到從eglibc svn庫的代碼,並建立它自己:

svn co http://www.eglibc.org/svn/libdfp/trunk libdfp 

網絡搜索顯示Ubuntu的軟件包以此爲libdfp,它可能是可利用的RHEL6太。

自述說:

When libdfp is loaded printf will recognize the following length modifiers: 

     %H - for _Decimal32 
     %D - for _Decimal64 
     %DD - for _Decimal128 

It will recognize the following conversion specifier 'spec' characters: 

     e,E 
     f,F 
     g,G 
     a,A (as debuted in ISO/IEC TR 24732) 

Therefore, any combination of DFP length modifiers and spec characters is 
supported. 
+0

好吧,libdfp似乎是要走的路 - 不幸的是,似乎它不是通過Fedora存儲庫提供的 - 從源代碼編譯似乎並不那麼簡單 - 它抱怨「libbid中沒有配置信息」 - 另一方面,gcc編譯的代碼調用像__bid_muldd3這樣的函數(當在_Decimal64值上執行操作) - 沒有鏈接錯誤 - 因此,gcc似乎在運行時包含libbid。 – maxschlepzig 2013-02-17 21:49:15

+0

嘗試使用配置選項'--with-backend = libdecnumber',它允許'configure'在Fedora 17上爲我工作。'configure --help'表示這是默認設置,但顯然它在說謊。雖然 – 2013-02-17 21:58:38

+0

後來編譯失敗,但似乎該庫只能建立在IBM s390和powerpc系統上 – 2013-02-17 22:19:45

相關問題