浮点数标準( 三 )


浮点数标準

文章插图
(11-bit) 到
浮点数标準

文章插图
 , 在分数部分则是
浮点数标準

文章插图

浮点数标準

文章插图
(52-bit) 。非规约形式的浮点数如果浮点数的指数部分的编码值是0 , 分数部分非零 , 那幺这个浮点数将被称为非规约形式的浮点数 。一般是某个数字相当接近零时才会使用非规约型式来表示 。IEEE 754标準规定:非规约形式的浮点数的指数偏移值比规约形式的浮点数的指数偏移值小1 。例如 , 最小的规约形式的单精度浮点数的指数部分编码值为1 , 指数的实际值为-126;而非规约的单精度浮点数的指数域编码值为0 , 对应的指数实际值也是-126而不是-127 。实际上非规约形式的浮点数仍然是有效可以使用的 , 只是它们的绝对值已经小于所有的规约浮点数的绝对值;即所有的非规约浮点数比规约浮点数更接近0 。规约浮点数的尾数大于等于1且小于2 , 而非规约浮点数的尾数小于1且大于0 。除了规约浮点数 , IEEE754-1985标準採用非规约浮点数 , 用来解决填补绝对值意义下最小规格数与零的距离 。(举例说 , 正数下 , 最大的非规格数等于最小的规格数 。而一个浮点数编码中 , 如果exponent=0 , 且尾数部分不为零 , 那幺就按照非规约浮点数来解析)非规约浮点数源于70年代末IEEE浮点数标準化专业技术委员会酝酿浮点数二进制标準时 , Intel公司对渐进式下溢出(gradual underflow)的力荐 。当时十分流行的DEC VAX机的浮点数表示採用了突然式下溢出(abrupt underflow) 。如果没有渐进式下溢出 , 那幺0与绝对值最小的浮点数之间的距离(gap)将大于相邻的小浮点数之间的距离 。例如单精度浮点数的绝对值最小的规约浮点数是
浮点数标準

文章插图
它与绝对值次小的规约浮点数之间的距离为
浮点数标準

文章插图
。如果不採用渐进式下溢出 , 那幺绝对值最小的规约浮点数与0的距离是相邻的小浮点数之间距离的
浮点数标準

文章插图
倍!可以说是非常突然的下溢出到0 。这种情况的一种糟糕后果是:两个不等的小浮点数X与Y相减 , 结果将是0.训练有素的数值分析人员可能会适应这种限制情况 , 但对于普通的程式设计师就很容易陷入错误了 。採用了渐进式下溢出后将不会出现这种情况 。例如对于单精度浮点数 , 指数部分实际最小值是(-126) , 对应的尾数部分从
浮点数标準

文章插图
{一直到
浮点数标準

文章插图

浮点数标準

文章插图
 , 相邻两小浮点数之间的距离(gap)都是
浮点数标準

文章插图
;而与0最近的浮点数(即最小的非规约数)也是
浮点数标準

文章插图
。这里有三个特殊值需要指出:如果指数是0并且尾数的小数部分是0 , 这个数±0(和符号位相关);如果指数 =