最小浮点数怎么能是2 ^( - 126),而不是2 ^( - 128)

时间:2017-04-01 06:42:50

标签: floating-point ieee-754

考虑一个32位浮点数(IEEE 754),尾数为0-22(23位),指数为23-30(8位),符号为31(1位)
我想找出可存储的最小正数 我被告知答案是1.18 * 10 -38 ,大约2 -126
我的分析如下 如果我们将所有零都放在尾数中并将所有零都放在指数中,那么十进制等值将是1.0 x 2 -128 = 2.93 x 10 -39

我哪里错了?
感谢

2 个答案:

答案 0 :(得分:2)

如果你把所有的都放在指数中,如果尾数是非零,那么你将获得NaN,如果尾数是0 Wikipedia IEEE 754。当指数二进制等于0时,您的最小值也在Denormal numbers空间内。

答案 1 :(得分:0)

虽然8位指数意味着-127到+128但是两种情况保留用于特殊值(参见here),所以最负的指数是-126。

顺便说一句,在Two's Complement系统中以8位存储-128是不可能的,IEEE 754系统是#include <vector> #include <boost/range/algorithm.hpp> #include <boost/sort/spreadsort/integer_sort.hpp> // I WANT USE THIS #include "myLib.hpp" using namespace std; int main(void) { vector <unsigned> v(20); for (unsigned i = 0; i < v.size(); i++) v[i] = rand() % 1000; imprime(v); // THIS PRINTS THE VECTOR boost::sort(v); // THIS SORT THE VECTOR imprime(v); integer_sort(v.begin(), v.end()); // THIS DOES'T WORK return 0; } 指数中使用的基本系统。