计算机中关于小数点的一点疑问.老师说过“计算机不能存小数点,约定‘定点数’来存储.”设置了固定的小数点位置,但是计算机是怎么知道小数点的位置的?坐等前辈,坐等师兄,etc.

问题描述:

计算机中关于小数点的一点疑问.
老师说过“计算机不能存小数点,约定‘定点数’来存储.”设置了固定的小数点位置,但是计算机是怎么知道小数点的位置的?
坐等前辈,坐等师兄,etc.

(1)定点表示法  
所谓定点表示法,是指在计算机中所有数的小数点的位置人为约定固定不变.这样,小数点的位置就不必用记号"."表示出来了.一般地说,小数点可约定固定在任何数位之后,但常用下列两种形式:  ①定点纯小数:约定小数点位置固定在符号之后,如:  显然,定点数表示法使计算机只能处理纯整数或纯小数,限制了计算机处理数据的范围.为了使得计算机能够处理任意数,我们事先要将参加运算的数乘上一个"比例因子",转化成纯小数或纯整数后进行运算.运算结果比例因子还原成实际数值.比例因子要取得合适,使参加运算的数、运算的中间结果以及最后结果都在该定点数所能表示的数值范围之内.  
(2)浮点表示法  
在浮点表示法中,小数点的位置是浮动的.为了使小数点可以*浮动,浮点数由两部分组成,即尾数部分与阶数部分.浮点数在机器中的表示方法如下:   其中,尾数部分表示该浮点数的全部有效数字,它是一个有符号位的纯小数;阶数部分指明了浮点数实际小数点的位置与尾数(定点纯小数)约定的小数点位置之间的位移量P.该位移量P(阶数)是一个有符号位的纯小数.  当阶数当为+P时,则表示小数点向右移动P位;当阶数为-P时,则表示小数点和左移动P位.因此,浮点数的小数点随着P的符号和大小而*浮动.  从上述可知,一个浮点数是由两个定点数组合而成的.而一个定点也可以看成是浮点数的一个特例.即当浮点数的阶数部分为零时(表示该数实际小数点的位置与定点小数约定位置一致),这样,浮点数只剩下尾数部分了.同理,定点数表示法是浮点数表示法的基础,而浮点数表示法是定点数表示法的应用.它们之间的相互关系,从理论上看有下述关系. 
 我们知道,任意一个二进制数总可以表示为纯小数(或纯整数)和一个2的整数次幂的乘积.例如,任意一个二进制数N可写成:             
 N=S×2^p   
式中,S称为数N的尾数;P称为数N的阶数,此处P、S都是用二进制表示的数.尾数S表示了数N的全部有效数字,显然S采用的数位越多,则数N表示的数值精确度越高.阶数P指明了数N的小数点的位置,显然P采用的数位越多,则数N表示的数值范围就越大.  
如假定P=0,此时,N=S×20=S.若尾数S为纯小数,这时数N为定点小数.  
如假定P=0,此时若尾数S为纯整数,则数N为定点整数.  
如假定P=任意整数,此时,数N需要尾数S和阶数P两部分共同表示,即数N为浮点数.  
显然,浮点数表示的数值范围比定点数表示的数值范围大得多.设浮点数的阶数位数为m+1位,尾数的位数为n+1位,则浮点数的取值范围为:   虽然浮点数具有表示数值范围大的突出优点,但是,浮点数的运算较为复杂.当计算机进行一次浮点数运算时,需要分别进行两次定点数运算.  
例如,设两个浮点数为:   
N1 = 2^P1×S1                 
N2 = 2^P2×S2   
如P1≠P2,则两数就不能直接相加、减,必须首先对齐小数点(即对阶)后,才能作尾数间的加、减运算.对阶时,小阶向大阶看齐,即把阶小的小数点左移,在计算机中是尾数数码右移,右移1位,阶码加1,直至两数的阶码相同为止,然后两数才能相加减   
浮点数的乘除法,阶码和尾数要分别进行运算.  
为了使计算机运算过程中不丢失有效数字,提高运算的精度,一般都采用二进制浮点规格化数.所谓浮点规格化,是指尾数S的绝对值小于1而大于或等于1/2,即小数点后面的一位必须是"1".例如,N= 2+100×0.1011101就是一个浮点规格化数.由于浮点数运算复杂,运算器中除了尾数运算部件外,还有阶码运算部件,控制部件也相应地复杂了,故浮点机的设备增多,成本较高.  
在计算机中,究竟采用浮点制还是定点制,必须根据使用要求设计.目前,一般小型机、微型机多采用定点制,而大型机、巨型机及高档微型机中多采用浮点制.