2013-03-31 36 views
2

我需要編程用於遺留應用程序的定點處理器。要求提供新功能,這些功能需要較大的動態範圍,即使在縮放之後,這些功能也可能超出固定點範圍。由於處理器由於多種原因而不會改變,因此我計劃將基於定點算法的基於軟件的方法應用於浮點運算。我想定義一些數據結構來表示底層定點處理器的C中的浮點數。有沒有可能做到?我打算使用IEEE floating point representation。什麼樣的數據結構對於實現乘法,除法,加法和小數等基本操作是很好的。 C/C++中是否已有一些開源庫?定點處理器中浮點操作的數據結構

+3

曾經有浮點仿真庫幾乎每個平臺。其中一些應該仍然通過谷歌周圍浮動。 –

回答

0

你並不需要任何數據結構來做到這一點。您只需使用整數來表示浮點編碼和整數即可表示解包的符號,指數和有效位域。

+0

你所描述的是一個完全成熟的類,隱含的約定僞裝。含義:你需要數據結構來做到這一點。 – xtofl

+0

你不需要任何*非平凡的*數據結構。當我們處理它時,類不是數據結構,關於手邊的問題不需要使用類。 –

+1

float上的操作通常需要單獨使用並更改符號,指數和尾數。將數據結構壓縮成一個32位的位模式將涉及大量不必要的提取和合並,而明確地存儲這三個字段。 –

1

大多數C開發工具沒有本機浮點支持的微控制器提供了用於浮點操作的軟件庫。即使你使用匯編程序進行編程,也可以使用這些庫。 (只是好奇,你正在使用哪種處理器和哪些開發工具?)

但是,如果您認真編寫自己的浮點庫,最有效的方法是將例程視爲以整數運行的例程。您可以使用聯合或代碼來跟隨浮點和整數表示之間的轉換。

uint32_t integer_representation = *(uint32_t *)&fvalue; 

注意,這是固有的未定義的行爲,如在C標準中未指定浮點數的格式。

的問題是,如果你堅持以匹配(通常32種或64位類型)浮點和整數類型容易得多,這樣,就可以看到的例程以純整數例程,如,例如,此外,需要浮點值的兩個32位整數表示形式,並返回結果的32位整數表示形式。

另外,如果你使用的例程自己,你很可能與標準的未實現的離開部位,如異常標誌,次正規數不同,NaN和INF等脫身