1又7/16如何用二进制表示?
16:2^4(说明小数点后面有4位)
7:111
结果:1.0111
形如0.1111111……(i个1)的数表示刚好小于1.0的数,可以用1.0 - 1/(2^i)来表示。
局限性:
(1)只能表示诸如x/2^k这样的数
(2)小数点的位置?
IEEE754标准
基于科学计数法的思想:对于一个数有唯一的表现形式。
来源:湖大CS课程组
数学形式:
s确定是正还是负,数值0的符号位特殊判断,故称为符号位。
M叫做尾数,范围在[1.0,2.0)之间,用原码表示。
阶码E表示2的幂,是一个二进制整数,用移码表示。
来源:湖大CS课程组
何为移码?
移码=真值+偏移量
真值就是带符号数。
在浮点数表示中,偏移量Bias=2^(k-1) - 1。
单精度中,Bias=127。
规范化值
exp(阶码) != 000…0,且 != 111…1,即移码上的位数字不全为0或1。
真值E=Exp-Bais。
(Exp本该是0~255,由于0和255另作他用,所以这里Exp为1~254,E为-126~127)
举个栗子:
15213.0(float):1.1101101101101 * 2^13
符号位s=0。
Exp=13 + 127 = 140:1000 1100
尾数frac = 110 1101 1011 0100 0000 0000(补足23位)
非规范化值
exp = 000…0,即移码上的位数字全为0。
E = 1 - Bias(126)。
非规范化值都是等距分布的,因为阶码值一样。
特殊值
exp = 111…1,即阶码上的位全为1。
(1)frac = 000…0 ,表示无穷大和溢出结果,至于正负由s决定。
例如:
1.0/+0.0 = +∞ 1.0/-0.0 = -∞
(2)frac != 000…0 ,表示NAN(Not a Number),用来表示一些无法表示的数。
例如:
表示范围:
来源:湖大CS课程组