浮点数的表示

          浮点数分为单精度(float)和双精度(double),它们的表示方法很特别,区别于整数,咱们经常使用的十进制表示法也有穷尽不能表示的数,更不用说二进制了,那么他们是怎么表示的呢?编码

          首先要知道11.11(二进制) 这个该怎么换算?  11.11 = 1*2^1+1*2^0+1*2^-1+1*2^-2   以此类推。二进制

          那么计算机表示浮点数,须要三种位模式+两个常数,符号位(1位)+ 阶码位(k位)+ 尾数位(n位) , 一个常数bias做为偏置量,bias=2^(k-1)-1,一个常数是1。1.11*2^4 = 11100 ,1.11*2^-4 = 0.000111   阶码就是指数,小数点后面乘号以前是尾数位,符号位不说了。很简单对吧,可是这里有小细节! 指数并非单纯的阶码而已,阶码-bias = 指数,咱们假定六位浮点数中,k=3,n=2,那么bias=3,随便拿一个数出来,0 110 11,  为了容易看我分开写了,阶码=110=6   指数 = 6-3 = 3; 那尾数位怎么办呢,尾数位=11 最后写出来就是 0.11*2^3 可是这不符合科学计数法标准,因此加一!那么最后结果就是 1.11*2 ^3 = 14  这也是六位浮点数所能表示的最大正数,为何呢? 110上边还有111呢? 14怎么多是最大的,事实是阶码 000 和 111 被占用了 用来表示一些特殊的数,因此阶码编码只能从 001 到 110,因此想固然 0 001 11 是最小的负数。float

          上面说了 阶码000 和 111 被用来表示一些特殊的数,什么数呢? 仍是6位浮点数  011100 表示正无穷; 111100 表示负无穷。固然还有其余的数这里就不说了(原本想画个数轴来表示,会更好一点,但是,不知道怎么画,总不能在纸上画出来用照片截吧=。=)方法

          以为仍是要补充一点,阶码为00000~的时候,指数应该等于 1-bias,而且尾数位也不用加1了,这样就会算出不少很奇葩的数。。。。计算机

相关文章
相关标签/搜索