理解浮点数存储

整体呈现
   二进制浮点数是以符号数值表示法格式储存,将最高效位元指定为符号位元(sign bit);“指数部份”,即次高效的e位元,为浮点数中经指数偏差(exponent bias)处理过后的指数;“小数部份”,即剩下的f位元,为有效位数(significand)减掉有效位数本身的最高效位元。 如下图所示:   +-+--------+-----------------------+   |S| Exp | Fraction |   +-+--------+-----------------------+
指数偏差
  指数偏差(表示法中的指数为实际指数减掉某个值)为 2e-1 - 1,参见有符号数处理的Excess-N。减掉一个值是因为指数必须是有号数才能表达很大或很小的数值,但是有号数通常的表示法——二补数表示法(two's complement),将会使比较变得困难。为了解决这个问题,指数在存储之前需要做偏差修正,将它的值调整到一个无符号数的范围内以便进行比较。此外,指数采用这种方法表示的优点还在于使得浮点数的正规形式和非正规形式之间有了一个平滑的转变。   范例    小数部分最高有效位由指数部分决定。如果指数在0 < exponent < 2e − 1之间,那么小数部分最高有效位将是1,而且这个数将被称为正规形式。如果指数是0,有效数最高有效位将会是0,并且这个数将被称为非正规形式。这里有三个特殊值需要指出:   如果 指数 是0 并且 小数部分 是0, 这个数±0 (和符号位相关)   如果 指数 = 2e − 1 并且 小数部分 是0, 这个数是 ±无穷大 (同样和符号位相关)   如果 指数 = 2e − 1 并且 小数部分 非0, 这个数表示为不是一个数(NaN).   以上规则,总结如下:   形势 指数 小数部分   零 0 0   非正规形式 0 非0   正规形式 1 到 2e − 2 任意   无穷 2e − 1 0   NaN 2e − 1 非零   32位单精度   单精度二进制小数,使用32个位元存储。   1 8 23 位长   +-+--------+-----------------------+   |S| Exp | Fraction |   +-+--------+-----------------------+   31 30 23 22 0 位编号 (从右边开始为0)   偏正值 +127
编辑本段数位
  S为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是−126~+127加上127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

你可能感兴趣的:(F#)