Linux内核完全剖析浮点数据类型_Linux内核完全剖析浮点数据类型试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Linux内核完全剖析 > 浮点数据类型

Linux内核完全剖析——浮点数据类型

    具有整数部分和小数(尾数)部分的数称为实数或浮点数。实际上整型数是小数部分为0的实数,是实数集的一个子集。由于计算机使用固定长度位来表示一个数,因此并不能精确地表示所有实数。由于计算机表示实数时为了在固定长度位内能表示尽量精确的实数值,分配给表示小数部分的位个数并不是固定的,即小数点是可以“浮动”的,因此计算机表示的实数数据类型也称为浮点数。为了便于程序移植,目前计算机中都使用IEEE标准754指定的浮点数表示方式来表示实数。     这种实数表示方式的一般格式如图 11-3 所示。它由有效数(Significant)部分、指数(Exponent)部分和符号位(Sign)组成。80387协处理器支持三种实数类型,它们每个部分使用的位数如图11-4所示。     图11-3  浮点数一般格式     图11-4  80387协处理器使用的实数格式     其中S是一个位的符号位。S=1表示是负实数;S=0表示是正实数。有效数(Significant)给出了实数数值的有效位数或尾数。当使用指数时,一个实数可以表示成多种形式。例如十进制数字10.34可以表示成1034.0×10-2、10.34×100、1.034×101或0.1034×102等。为了使计算能够得到最大精度值,我们总是对实数进行规格化(Normalize)处理,即调整实数的指数值,使得二进制最高有效数值总是1,并且小数点就位于其右侧。因此,上述例子正确的规格化处理结果就是1.034×101。对于二进制数来说就是1.XXXXX×2N(其中X是1或0)。如果我们总是使用这种形式来表示一个实数,那么小数点左边肯定是1。所以在80387的短实数(单精度)和长实数(双精度)格式中,这个“1”就没有必要明确地表示出来。因此在短实数或长实数的二进制有效数中,0x0111...010实际上就是0x1.0111...010。     格式中的指数字段含有把一个数表示成规格化形式时所需要的2的幂次值。正如前面提到的,为了便于数字大小的比较,80387使用偏置数形式来存储指数值。短实数、长实数和临时实数的偏置基量分别是127、1023和16383。因此一个短实数指数值0b10000000实际表示21(0b01111111 + 0b00000001)。     另外,临时实数是80387内部运算时表示数的格式。它的最高有效数1被明确地放置在位63处,并且无论你给出的数是什么数据类型的(例如,整型数、短实数或BCD码数等),80387都会把它转换成临时实数格式。80387这样做的目的是为了使得精度最大化并且尽量减少运算过程中的溢出异常。显式地把1表示出来是因为80387在运算过程中确实需要该位(用于表示极小的数值)。当输入到80387中的短型或长型实数被转换成临时实数格式时,就会明确地在位63处放置一个1。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Linux内核完全剖析》其他试读目录

• 序
• 数学协处理器
• 浮点数据类型 [当前]
• 特殊实数
• 数学协处理器功能和结构
• 栈式浮点累加器
• 状态与控制寄存器
• 出错指针寄存器
• math_emulate.c程序