2014-10-10 50 views
2

浮点数表示中机器epsilon和最少正数之间的区别是什么?机器epsilon与最少正数

如果我尝试显示在若干行中的浮点数。是确切0和第一正之间(数其浮点可表示)和两个连续的数字之间的间隙的间隙,不同?

哪一个比较小?以及这两个值取决于哪个因素(mantisa或exponent)?

回答

2

机的ε-实际上是在一个浮点数系统表示的相对错误。 使用这个你可以找到绝对的错误。怎么样? 例如参见IEEE754,您有23位尾数和8位偏置指数。 按小量的定义,你可以通过把所有零指数 找到它,我们得到2^-23 我们现在有哪些1个+小量不等于1

因此,要找到任何绝对误差最小正数数字范围,我们只是将它乘以该数字的指数。

尽管最少数字是数字表示可以表示的最小数字。例如IEEE754表示中的全零。

两者是不同的东西......

0

7机器epsilon最常见的定义是1.0和下一个可表示数字之间的距离。对于正常/标准化的数字,有效位的最高有效位始终为1,这意味着机器的epsilon只取决于有效位的位数。标准64-bit IEEE double在那里有一个隐含的和52个实际的位;翻转他们中的至少一个给你一个2^-52的小数。由于许多编译器使用IEEE格式,因此这也是DBL_EPSILON(float.h)的结果。

在有效数字的至少显著位的值 - 并且因此两个连续浮子之间的差 - 有时也被称为一个ULP(德纳)。因此机器epsilon是ulp @ 1.0。

最小的可表示归一化double在小数点之前有1位,其余全为零,并且有最小可能(规则)指数。因此它只取决于可能的指数范围。对于2^-1022(DBL_MIN)的标准双精度值。

非归一化(反常规/次正常)值可能变小。它们中最小的一个在有效位的最后位置具有唯一的1位和最小可能的指数(其倾向于用于非正规化和NaN),因此取决于指数范围和尾数位的数量。对于2^-1074的标准双倍。

wiki article具有良好的图表,所有的血淋淋的细节,以及相关标准的链接。

只要指数保持不变,浮动间的间距就是规则的,当指数增加时,浮动间距就会加倍。

对于所有标准的双非正规数是2^-1074,那就是,你可以得到该类型最严格的间距(绝对值)。从DBL_MIN开始,它是2^-1073,依此类推。

从在间隔2^53是2.0,这意味着你可以使用兼作代用整数只达到2^53包上古怪的平台计数。

0

对于IEEE 754我们与binary64:

  • 标志:1位
  • 指数:11位
  • 尾数:53位

表示的最小数量取决于指数。对于11位,我们可以去aprox。 10^-323。 使用Python:

0.0 == 1e-323 # False 
0.0 == 1e-324 # True 

机器的ε-依赖于sigficand并且与相对的舍入误差。对于53位,我们有aprox的epsilon。 1E-15。

1.0 == 1.0 + 1e-15 # False 
1.0 == 1.0 + 1e-16 # True