一、浮点数的概念引入
在计算机中的数据有定点数和浮点数两种表示方式。
1. 定点数是指小数点固定在某个位置上的数据,一般有小数和整数两种表示形式。
定点小数:将小数点固定在数据数值部分的左边,符号位的右边。
定点整数:将小数点固定在数据数值部分的右边。
定点数表示法简单直观,但数值表示范围小,运算时容易产生溢出。
2. 为弥补定点数表示范围的不足,防止溢出,发明了浮点表示法。
浮点数是指小数点位置可浮动的数据。
浮点数标准是采用的IEEE标准754,是一种类似于科学计数法的表示法。
3. 科学计数法
任何一个数可以通过科学计数法表示为
其中:
1≤
n为整数。
10为基数,为约定值。
Eg:-12345.69的科学计数法表示过程为:
由于1≤
所以其科学计数法表示形式为-1.234569×
同理,0.0001234569的科学计数法表示过程:
小数点必须向右移动4位,即a=1.234569,n=-4
所以其科学计数法表示形式为 1.234569×
4、移码的概念
当阶码为n+1位时,其最高位为符号位,
注意这个和IEEE中的偏码不一样。
移码其实就是将补码的符号位取反,这样使得浮点数的机器0(当数据小于机器所能表示的最小数时≤-
而数据0的表示为
二、IEEE标准754
1. IEEE标准754中规定了三种浮点数格式:单精度、双精度、扩展精度。此处以单精度为例。
单精度浮点数N是一个32位的由0或1组成的位序列,其格式图如下:
S |
E |
M |
其中:
S:为符号位
E:为指数位,也称阶码,用移码表示。指明小数点在浮点数中的范围。决定了浮点数的表示范围。
M:为尾数位。决定了浮点数的精度。
若以s,e,m,n分别表示S,E,M,N的实际数值,则
2. e和m的计算
M
如同科学计数法一样,m的整数位也只能有一位,所以m只能为1或0,绝大多数情况下,都是为1,除非n值非常小。既然绝大多数情况下为1,那么该位即可省略,而且扩大了精度,一举两得。所以M的位序列只可能为1.0001011或0.0110100,如果m的整数位不是一位,则需要左右移动小数点并同时改变阶码值以达到这一要求的形式,这也称为浮点数的格式化表示。
特殊情况:①当一个浮点数的尾数为0时,不论其阶码为何值
②当阶码的值遇到比它能表示的最小值还小时,不管其尾数值为何值
这两种情况都把该浮点数视为0,称为机器0。
就是这个数实在是太小了,小数点一直往右移也一直没碰到1,直到达到了阶码能表示的最小值,这样的数则认为是0。
E
单精度浮点数E的位数为8位,除去阶符,其能表达的范围为
而
例:
将十进制浮点数-321.456转换成二进制表示。
① 负数,所以s=1
② 将整数部分321转换为二进制101000001,小数部分0.456转换为二进制,即乘上2,若进位则置1。转着转着发现一直难以达到1,这便是浮点数的精度问题,不管他,取15位0. 011101001011110,和整数部分合在一起凑成24位:
101000001.011101001011110,进行格式化,将小数点左移8位,则|E|=127+8=135
E=10000111,M=01000001011101001011110,S=1
③ 最后将三者合在一起,得到浮点数的二进制表示
1100 0011 1010 0000 1011 1010 0101 1110
化作16进制为C3 A0 BA 5E
倒过来,已知一个位序列,求出对应的十进制数。
已知位序列为1100 0011 1010 0000 1011 1010 0101 1110
可确定s=1
e=(100 0011 1)-127=8
m=|1. 010 0000 1011 1010 0101 1110|=1+2^(-2)+ 2^(-8)+ 2^(-10)+ 2^(-11)+ 2^(-12)+ 2^(-14)+ 2^(-17)+ 2^(-19)+ 2^(-20)+ 2^(-21)+ 2^(-22)
=1+0.25+0.0000002384185791015625(1+2+4+8+32+256+1024+2048+4096+16384)
=1.255687
所以n=(-1)^1+1.255687*2^8=321.45599
最新评论