如何计算机器epsilon?

时间:2016-03-10 17:32:43

标签: c++ floating-point precision

用于32位浮点ISO-C标准的机器Epsilon是: 1.19209e-07 max Float是: 3.40282e + 38

如何从浮动最大值?

导出机器epsilon

我已使用此代码段获取值:

dboSubjects.Race + dbo.SUBJECTS.Sex AS RaceSex 

1 个答案:

答案 0 :(得分:1)

  

如何从浮动最大值?

导出机器epsilon

您可以通过观察最大有限浮点数来得出类似IEEE 754的二进制浮点系统的机器epsilon,最大有限浮点数为1.111 e max

在这些条件下,机器epsilon是二进制的,0.000 1.

然而,最大有限浮点数和机器epsilon实际上是不同的参数,它们捕获浮点系统的不同特征:可以用有限近似表示的值的范围,以及这些近似的精度。

编辑:根据OP的要求,进行骨干实施:

#include <stdio.h>
#include <float.h>

int main(void) {
  printf("%a\n", FLT_MAX);
  printf("FLT_MAX is 0x1.fffffep+127 therefore machine epsilon must be:\n");
  printf("           0x0.000002p0 that is approx %e in decimal\n", 0x0.000002p0);
}

在我的平台上,我得到了结果:

0x1.fffffep+127
FLT_MAX is 0x1.fffffep+127 therefore machine epsilon must be:
           0x0.000002p0 that is approx 1.192093e-07 in decimal

由于整个练习完全没有意义,因此FLT_MAX的机器epsilon的实际计算留给了读者。