我正在編寫幾個函數,它們會將float/double轉換爲固定點和返回。有沒有人知道確定用於float或double的指數部分的位數的最佳方法?我希望能夠使用std :: numeric_limits,但沒有運氣。指數使用了多少位
指數部分是由C++標準定義還是編譯器/機器特定?或者它可以在運行時變化嗎?
我正在編寫幾個函數,它們會將float/double轉換爲固定點和返回。有沒有人知道確定用於float或double的指數部分的位數的最佳方法?我希望能夠使用std :: numeric_limits,但沒有運氣。指數使用了多少位
指數部分是由C++標準定義還是編譯器/機器特定?或者它可以在運行時變化嗎?
如果在該平臺上的float
被編碼在IEC-559(又名IEEE754在美國)中,則它將總是8位。如果該平臺的double
使用IEC-559編碼(或任何64位版本),則它將始終爲11.如果不是,那麼甚至不能假定它存儲指數。
而標準不指定應保存什麼格式浮點數,在C++ 11(和C++ 03?),你可以測試是否float
或double
使用numeric_limits<T>::is_iec559
符合IEC-559(其中T
是一個浮點型):
#include <limits>
cout << "float is IEC-559? " << numeric_limits<float>::is_iec559 << endl
<< "double is IEC-559? " << numeric_limits<double>::is_iec559 << endl;
閱讀上IEEE-754。 float
和double
的指數大小應分別爲8位和11位。
從numeric_limits中缺少什麼<> :: {min_exponent,max_exponent}? (他們被限制爲正常數字給出答案,如果這不適合你,則與denorm
和digits
結合)。