数据库系统工程师考试知识点:定点数和浮点数
定点数和浮点数的区别在于如何对待小数点,在运算方式上也不相同,衡量一个计算机系统,定点运算和浮点运算是两个重要的指标。定点数的小数点是隐含的,固定在某个位置。如果该位置是在数的最低位之后,就是定点整数。定点数表示比较简单,运算规则也比较容易实现,但是当数值范围变化大时,使用定点数表示和运算就比较困难。为了表示更大范围的数值,可以使用浮点数表示法。
在表示一个很大的数时,我们常常使用一种称为科学计数法的方式:
其中,M称为尾数,e是指数(阶码),R为基数。
浮点数就是使用这种方法来表示大范围的数,其中基数一般是2、8、16.而且对于特定机器而言,基数是固定不变的,所以在浮点数中基数并不出现。从这个表达式可以看出,浮点数表示的精读取决于尾数的宽度,范围取决于基数的大小和指数的宽度。
1.格式化数
使用格式化数是提高浮点数有效位的方法。格式化的意思是把尾数前面加0.同时修改指数,这样,在尾数位数固定的情况下,能提供最多的有效位来表示尾数。当指数小于能够表示的最小值时,这个数称为机器零,此时会把尾数和指数同时清零。
2.定点数的溢出处理
计算机中通常使用补码进行计算。两个正数相加,如果结果的符号位变成了1.则表示有溢出;两个负数相加,如果结果的符号位变成了0.那么也意味着溢出。如果是正数和负数相加,则不会出现溢出的情况。
判断处理的方法可以再增加一个符号位,称之为第一符号位,原来那个符号位变成了第二符号位。两个符号位都参与计算,如果计算结果的两个符号位相同,表示没有溢出,如果不同,就表示出现了溢出。而第一符号位才是真正的符号。
也可以通过进位信号来判断,当结果的最高位和符号位的进位信号一致时(都有进位信号或都没有进位信号),则没有溢出,否则表示有溢出。
3.浮点数的运算
浮点数运算过程比定点数复杂,包括以下过程:
(1)对阶。首先计算两个数的指数差,把指数小的向指数大的对齐,并将尾数右移指数差的位数。这样,两个浮点数就完成了对阶的操作。可以看出,对阶的过程可能使得指数小的浮点数失去一些有效位。如果两个浮点数阶数相差很大,这个差大于指数小的浮点数的尾数宽度,则对阶后指数小的浮点数的尾数就变成了0.即当做机器零处理了。
(2)尾数计算。对阶完成后,两个浮点数的尾数就和定点数一样进行计算。
(3)结果格式化。尾数计算后,可能会产生溢出,此时将尾数右移,同时指数加1.如果指数加1后发生了溢出,则表示两个浮点数的运算发生了溢出。如果尾数计算没有溢出,则尾数不断左移,同时指数减1.直到尾数为格式化数。在这个过程中,指数小于机器能表达的最小数,则将结果置机器零,这种情况称为下溢。