机器epsilon与浮点表示中的最小正数之间有什么区别?
如果我试图在数字线上显示浮点数。是否是精确0和第一个正数(浮点数可以表示的数字)之间的差距,以及两个连续数字之间的差距,不同?
哪一个通常较小?这两个值取决于哪个因素(mantisa或exponent)?
答案 0 :(得分:3)
机器epsilon实际上是浮点数系统表示中的相对错误。 使用此功能,您可以找到绝对错误。怎么样? 例如,在IEEE754中,您有23位尾数和8位偏置指数。 根据epsilon的定义,您可以通过将所有零置于指数中来找到它 我们得到2 ^ -23 我们现在有最少的正数,其中1 + epsilon不等于1
因此,为了找到任何数字范围的绝对误差,我们只需将它与该数字的指数相乘。
而最小数字是数字表示可以表示的最小数字。例如IEEE754表示中的所有零。
两者都是不同的东西......
答案 1 :(得分:0)
7机器epsilon最常见的定义是1.0和下一个可表示的数字之间的距离。对于正常/标准化数字,有效数字的最高有效位始终为1,这意味着机器epsilon仅取决于有效数字中的位数。标准64-bit IEEE double有一个暗示,52个实际位;翻转它们中的至少一个会给你一个2 ^ -52的epsilon。由于许多编译器使用IEEE格式,因此您也可以获得DBL_EPSILON(float.h)。
有效数字中最低有效位的值 - 以及因此两个连续浮点数之间的差异 - 有时称为ulp(Knuth)。因此机器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,这意味着您可以使用双精度作为ersatz整数来计算奇怪的平台,最多只能达到2 ^ 53(包括两者)。
答案 2 :(得分:0)
对于IEEE 754,我们使用binary64:
最小的可表示数字取决于指数。对于11位,我们可以去aprox。 10 ^ -323。 使用python:
0.0 == 1e-323 # False
0.0 == 1e-324 # True
机器epsilon取决于sigficand并且与相对舍入误差有关。对于53位,我们有aprox的epsilon。 1E-15。
1.0 == 1.0 + 1e-15 # False
1.0 == 1.0 + 1e-16 # True