计算机中数的定点表示和浮点表示
一. 定点表示
小数点按约定方式标出
定点计算机里面小数点的位置(数的定点表示方式):
小数点在数符位的后面的话:表示的数据是小数
小数点数值部分的后面的话,表示的数据是整数
定点机 小数定点机 整数定点机 原码 -(1 - 2^( - n ))~ + ( 1 - 2^( - n )) - (2^n - 1)~ +(2^n - 1)) 补码 - 1 ~ + ( 1 - 2^( - n )) - 2^n ~ + ( 2^n - 1) 反码 -(1 - 2^( - n ))~ + ( 1 - 2^( - n )) - (2^n - 1)~ +(2^n - 1)
二.浮点数表示
- 为什么要引入浮点数类型
- 程序员要调节小数点的位置
- 数的表示范围小,为了能表示相差很大的数据,需要很长的机器字长
- 存储利用率较低
1)浮点数的一般形式
-
注意:尾数的绝对值小于等于1
j 整数,可正可负
2)浮点数在计算机中的表现形式
3)浮点数的表示范围
-
最小的负数: 绝对值是最大的、尾数部分绝对值最大(原码表示)
阶符 阶码 数符 尾数 0 111(共m个) 1 1111(共n个) 阶符、阶码(最大) 负数最小 尾数部分总共为n位: 尾数的最大值为1 - 2^(-n)
阶码部分总共为m位: 阶码的值最大为:2^m - 1
所以最小的负数为: - (2^m - 1 ) * ( 1 - 2^(- n))
- 最大的负数: 接近于0。尾数的绝对值最小,阶码最小
阶符 阶码 数符 尾数 1 111111(共m个) 1 0000001(共n个) 阶符、阶码(最小) 负数最大 尾数部分为n位: 尾数的绝对值最小位 - 2^( - n)(数符:为1,剩余位的n-1位为0,最后一位为1)
阶码部分共m位: 阶码的值位2^m - 1(阶符:应该位1,剩余位也为1)
最小的负数: - 2 ^-(2 ^ m - 1) * 2 ^ ( - n)
- 最小的正数: 阶符位为负,阶码全为1,尾数最小,数值位为正
阶符 阶码 数符 尾数 1 1111111(共m个) 0 000001(共n个—n-1个0) 阶符、阶码(最小) 正数最小 最小的正数: 2 ^-(2 ^ m - 1) * 2 ^ ( - n)
- 最大的正数: 尾数全1,阶码全为1,阶符位和数符位为正
阶符 阶码 数符 尾数 0 111111(共m个) 0 11111111(共n个1) 阶符、阶码(最大) 正数最大 最大的正数: 2(2m - 1) * (1 - 2^ (- n))
上溢 阶码 > 最大阶码
下溢 阶码 < 最小阶码
-
练习:
由题:算出当阶码取“4”的时候,即可取到±30000的数值。尾数保留的位数越长(尾数尽可能的长),精度越大, 所以选择阶码取4位,尾数取24-4-1-1=18位。
4)浮点数的规格化
-
尽可能的保持精度、有效的尾数足够的多
数据在进行移位的时候,要保证数据真值不变 -
练习1
正数最大值 2^ (2^4-1)*( 1 - 2^(-10)) = 2^15 * (1 - 2^(-10)) 正数最小值 2^(-( 2^4 - 1)) * ( 2^(-1)) = 2^( - 15) * (2^(-1)) = 2^(-16) 负数最大值 -2(-(24 - 1)) * (2^(-1)) = -2^( - 15) *(2^(-1)) = -2^(-16) 负数最小值 -2(24-1)*( 1 - 2^(-10)) = -2^15 * (1 - 2^(-10)) -
练习2
> 解:+(19)/128 = 10011/128 = 10011向右移动了7位0.0010011---->添加成10位,变成0.0010011000
定点表示: 0.0010011000
浮点规格化形式: 0.10011000*2^(-10)
定点机中: [x]原 = [x]反 = [x]补 = 0.0010011000
浮点机中: [x]原 = 1, 0010 ; 0.10011000
[x]补 = 1, 1110; 0.10011000
[x]反 = 1, 1101; 0.10011000
5)机器零
-
当浮点数尾数为0时,不论其阶码为何值,按机器零处理
-
当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理
-
如 m = 4 n = 10
当阶码和尾数都用补码表示时,机器零为
X, X X X X; 0 . 0 0 … 0
(阶码=-16) 1, 0 0 0 0; X . X X … X
当阶码用移码,尾数用补码表示时,机器零
0, 0 0 0 0; 0 . 0 0 … 0
-
6)IEEE 754标准
-
尾数为规格化表示的(尾数规格化,见上图)非“0”的有效位最高位为“1”(隐含->基值为2时)
符号位S 阶码 尾数 总位数 短实数 1 8 23 32 长实数 1 11 52 64 临时实数 1 15 64 80