1/10就是0.1
八位浮点数是2进制
设小数点后第i位是xi
那就是X1×2^(-1)+X2×2^(-2)+...+Xn×2^(-n)=∑Xi×2(-i)
凑一下数最后把凑好的数规格化,超出八位就降低一个精度,再凑再规格。
首先,将十分之一转换成二进制
浮点数储存时,整数位默认为1,小数部分作为尾数;实际上是根据二进制科学计数法来保存
小数转换成二进制的规则为:1.5(小数部分为二分之一)转换为二进制小数则为1.1,则float类型存储的尾数部分为1;1.25(小数部分为四分之一,2的平方分之一)转换为二进制小数则为1.01,则float类型存储的尾数部分为01,以此类推
所以,将十分之一转化为二进制,则首先要将其乘以2的次方倍,将整数部分凑1
而题目要求指数位只有3位,因此最多乘以2的负4到正3次方,最接近1的为乘以2的3次方,结果为0.8,小于1,则只能近似为1储存
因此,十分之一的浮点型存储方式为:
0 000 0000
将此二进制浮点数再转换为十进制则为:
1.0000 * 2^(-3) = 0.125
注:指数位是有偏移量的,一般来说偏移量为 指数的最高位为0,其余位为1的数字大小,也即指数位为3位的话,偏移量为011,代表2的0次方,也即100代表2的1次方,010代表2的-1次方
先大致说明一下 8位浮点数表示法,详细内容搜索IEEE754规范,并仔细阅读。
/// +----+-----------+----------------+
/// + b7 | b6 b5 b4 | b3 b2 b1 b0 |
/// +sign| exp | mantissa |
/// +----+-----------+----------------+
这里的符号位是最高位:0为正,1为负
指数位,阶码,3位:注意要减去4,000表示-4,111表示3,IEEE754规范里还有点不同
小数位,4位:按IEEE754规范,隐含着1.0
如果小数部分隐含着1.0,则:
数值:0.1015625
二进制表示:00001010
小数部分(二进制):1.1010
小数部分(十进制):1.625
阶码:-4
0.1015625 = 1.625 * (2 ^ -4)
如果没有隐含着1.0,则是:
数值:0.1015625
二进制表示:00011101
小数部分(二进制):0.1101
小数部分(十进制):0.8125
阶码:-3
0.1015625 = 0.8125 * (2 ^ -3)
所以,答案都是0.1015625