2013-02-24 75 views
4

我已經創建了我自己的固定類型整數類型,並且該庫可以在很多編譯器和平臺上正常工作,唯一需要解決的問題是從內置浮點類型到我的類型。從浮點轉換爲自定義數值類型

的浮點類型可能有小尾數但隨着指數沿着它可能有很大的價值,如果我選擇投floatdouble,或long doublelong longunsigned long long可能發生截斷。

如果編譯器使用IEEE-754規範,可以很容易地提取尾數和指數,但是如果編譯器使用其他格式會怎麼樣。

所以,我的問題:是否有任何通用算法,允許我只使用語言特徵從浮點中提取完整值?

感謝

+2

通過使用'std :: numeric_limits '成員可以很好地瞭解當前平臺上FP類型的特性;從那裏你可以確定尾數和尾數的大小,從而確定你必須乘以數字來得到整個尾數時,拋出一個整數(也,你知道是否有可用的任何整數足夠大爲此工作)。 – 2013-02-24 23:08:46

+1

查看['frexp'](http://en.cppreference.com/w/cpp/numeric/math/frexp)函數系列。 – 2013-02-24 23:32:12

回答

5

可能對你有用my answer to a somewhat similar question here。這個想法是,如果底層格式是二進制的,那麼如果尾數中沒有比最大整數類型更多的位,則幾乎可以保證能夠毫無損失地提取尾數和指數。您可以使用double frexp(double value, int *exp);double ldexp(double x, int exp);用於此目的。

另一種選擇是sprintf()使用%a的號碼獲取所有數字,然後手動將文本表示法轉換爲您所需的數字。

+0

謝謝你,那是你寫在那裏的一個很好的答案。 – 2013-02-24 23:39:29