2011-02-10 45 views
1

我不想不必要地重新發明輪子,但我一直在尋找strtod的功能,但有一個基本參數(2,8,10,16)。 (我知道strtoul允許一個基本參數,但我正在尋找返回類型雙)。任何建議/指針在正確的方向?謝謝。strtod與基本參數

回答

2

對於任意基礎,這是一個難題,但只要你的基數是2的冪,樸素樸素算法就可以正常工作。

strtod(在C99中)支持與C語言的十六進制浮點常量相同格式的十六進制浮點數。 0x前綴是必需的,p分隔指數,指數以10爲底,代表2的冪。如果您需要支持C99之前的庫,您將沒有這種運氣。但是因爲你也需要2/4/8基數,所以無論如何它可能是最好的。

編輯:天真的算法的概要:

  1. 開始用浮點累加器變量(double或什麼的,因爲你喜歡)初始化爲0
  2. 從最左邊的數字開始,直到小數點,對於您處理的每個字符,將累加器與基數相乘,並將字符的值添加爲數字。
  3. 在小數點後面,開始一個新的運行地點值變量,最初爲1/base。在您處理的每個字符上,添加數字值乘以地點值變量,然後按地點除以地點值變量。
  4. 如果看到指數字符,閱讀次數以下它作爲一個整數,如果你想有可能通過處理2.

電源使用標準庫函數來縮放浮點數將數字過多的表格捨去後,一旦超過步驟2或3中重要位置的數量,您必須制定出該邏輯。否則,您可以忽略該數字。

0

不太可能 - 我從來沒有在其他數字庫中看到浮點數編碼爲「小數」。

+1

相反,六角浮標是C標準的一部分。 – 2011-02-10 21:07:41

+0

還值得注意的是,爲了有效存儲精確的浮點值,並且爲了避免由於其他軟件中的錯誤而導致回讀不正確的值的風險,您應該始終將浮點數存儲在兩個冪的基數中當他們打印他們作爲文本。 – 2011-02-10 21:40:34