Linux内核完全剖析特殊实数_Linux内核完全剖析特殊实数试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Linux内核完全剖析 > 特殊实数

Linux内核完全剖析——特殊实数

    与上面表中格式某些值无法表示的情况类似,使用实数格式表示的某些值也有其特殊含义。对于80位长度格式的临时实数,80387并没有使用其可表示的所有范围数值。表11-3是80387使用中的临时实数所能表示的所有可能的数值,其中有效数一栏虚线左侧1位表示临时实数位63,即明确表示数值1的位。短实数和长实数没有此位,因此也没有表中的伪非规格化类别。下面说明其中的一些特殊值:零值、无穷值、非规格化值、伪非规格化值以及信号NaN(Not a Number)和安静NaN。     表11-3  80387临时实数所能表示的数值类型和范围     负号 偏置型指数 有效数 类别     0/1 11...11 1 11...11 安静NaNs – QNaNs(Quiet NaNs)     0/1 11...11 1 ...      0/1 11...11 1 10...00 不确定值(Indefinite)     0/1 11...11 1 01...11 信号NaNs – SNaNs(Signalling NaNs)     0/1 11...11 1 ...      0/1 11...11 1 00...01      0/1 11...11 1 00...00 无穷数(Infinite)     0/1 11...10 1 11...11 规格化数(正常数)(Normals)     0/1 ... 1 ...      0/1 00...01 1 00...00      0/1 00...00 1 11...11 伪非规格化数(Pseudo-Denormals)     0/1 00...00 1 ...      0/1 00...00 1 00...00      0/1 00...00 0 11...11 非规格化数(Denormals)     0/1 00...00 0 ...      0/1 00...00 0 00...01      0/1 00...00 0 00...00 零(Zero)     零是指数和有效数均为0的值,其余指数为0的值作保留,即指数是0的值不能表示一个正常实数值。无穷值是指数值为全1、有效数值为全零的值,而且指数值为0x11...11的所有其余值也作保留使用。     非规格化数(Denormals)是一种用于表示非常小数值的特殊类值。它可以表示渐进下溢或渐进精度丢失情况。通常要求数值表示成规格化数(左移直到有效数的最高有效位是位1)。然而非规格化数的有效数最高有效位不是1。此时偏置型指数0x00...00分别是值为2-126、2-1022、2-16382的短实数、长实数和临时实数指数值的特殊表示方式。这种表示比较特殊,因为偏置型指数0x00...01对三种实数类型也分别表示相同的指数值2-126、2-1022、2-16382。     伪非规格化类数值(Pseudo-denormals)是有效数最高有效位为1的值,而非规格化类数值的该位是0。伪非规格化数很少见,它们可以用规格化类数来表示却没有这么做。因为上面已经说明特殊的偏置指数0x00...00与规格化数的指数0x00...01具有相同的值。因此伪非规格化类数可以表示成规格化类数值。     另一种特殊情况是NaN。NaN是指“不是一个数”(Not a Number)。NaN有两种形式:会产生信号(Signaling)的和不会产生信号的或称为安静的(Quiet)。当一个产生信号的NaN(SNaN)被用于操作时就会引发一个无效操作异常,而一个安静的NaN(QNaN)则不会。SnaN是一类会引发无效操作异常的数值。使用的方法就是程序先把变量都初始化为SNaN值,在实际使用这个变量时还需要对其进行真正的赋值。这样若操作过程中使用了一个未被初始化的值就会引发异常。当然,NaN类数值也可以用来存储其他信息。     80387自身不会产生SNaN类的值,但会产生QNaN类的值。当发生无效操作异常时80387就会产生一个QNaN类值,并且操作的结果将是不确定值(Indefinite)。不确定值是一种特殊的QNaN类值。每种数据类型都有一个表示不确定值的数。对于整型数则是用其最大负数来表示其不确定值。     另外还有一些80387不支持的临时实数值,即那些没有在上表中列出的数值范围。若80387遇到这些数值,就会引发无效操作异常。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

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

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