我不明白 Machine Epsilon 是什么意思

I do not understand what Machine Epsilon means

提问人:m615 提问时间:11/3/2023 最后编辑:Cris Luengom615 更新时间:11/4/2023 访问量:80

问:

我正在学习Matlab和计算机算术,但我很难掌握Machine Epsilon的概念。我希望有一个简单的解释,就好像我还是个孩子一样。“2.2204e-16”是什么意思,添加“1”时有什么问题,它的目的是什么?

我只认为使用 64 位机器 epsilon,我们知道一个数字精确到第 16 位,但我有很多疑问。

MATLAB 数学 浮点 计算机科学 epsilon

评论

0赞 Cris Luengo 11/3/2023
从这里开始阅读: stackoverflow.com/q/686439/7328782
0赞 P Varga 11/3/2023
这与MATLAB无关,只是IEEE浮点运算的工作原理。如果您想深入了解它,最好的来源是IEEE标准本身
0赞 P Varga 11/3/2023
ieeexplore.ieee.org/document/8766229

答:

1赞 chux - Reinstate Monica 11/3/2023 #1

“2.2204e-16”是什么意思,添加“1”时有什么问题,它的目的是什么?

使用典型的 64 位浮点数,epsilon 约为 0.000000000000000022204(“2.2204e-16”或 2.2204*10-16)或正好是 2-52

Epsilon:1 与给定浮点类型中可表示的大于 1 的最小归一化值之间的差值。

...
在 [0.5 和 1.0] 之间,64 位浮点步长各为 2-53
在 [1.0 和 2.0] 之间,64 位浮点步长各为 2-52。Epsilon
在 [2.0 和 4.0] 之间,64 位浮点步长各为 2-51
在 [4.0 和 8.0] 之间,64 位浮点步长各为 2-50


我们知道一个数字精确到第十六位数字,但我有很多疑问。

典型的浮点数,如果以 2 为基数:±b.bbbbbbbb... * 2指数精确到 53 个二进制数字。
大约是 15.95 或对数10(253十进制数字 ±d.ddddddd... * 10指数

0赞 Eric Postpischil 11/4/2023 #2

非零有限浮点数表示为 ±fbe,其中:

  • b 是一个固定整数,它是格式的基础(最常见的是 2),
  • f 是以 b 为基数的数字,带有 p 位数字,并且
  • e 是某个区间内的整数指数,e 最小值 ≤ e e最大值。

f 称为有效。p 是格式的精度f 被限制在某个间隔内。目前,1 我们取 1 ≤ f < b。例如,当 b = 2 且 p = 53(通常用于 的格式的精度)时,数字 1 表示为:double

  • +1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

即“1.”后跟 52 个“0”数字,因此它是以 2 为基数的 53 位数字。

所谓的机器 epsilon 是我们为获得下一个可表示的数字而可以做出的最小更改。下一个数字是:

  • +1.0000000000000000000000000000000000000000000000001 2•2 0.

所以区别在于:

    • +0.000000000000000000000000000000000000000000000000001 2•2 0.

即 2−52•20 = 2−52 ≈ 2.220446049•10−16

这是最小精度单位 (ULP) 1。

请注意,ULP 取决于数字的一般大小,特别是使用哪个指数来表示它。数字 32,768 用指数 15 表示:

  • +1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

因此,下一个可表示的数字是:

  • +1.00000000000000000000000000000000000000000000000001 2•2 15.

这意味着区别在于:

  • +0.000000000000000000000000000000000000000000000000001 2•2 15.

即 2−52•215 ≈ 7.275957614•10−12

因此,32,768 的 ULP 约为 7.275957614•10−12

补充

我只认为使用 64 位机器 epsilon,我们知道一个数字精确到第 16 位,但我有很多疑问。

格式中的位数只能告诉您格式中数字的精度,而不能告诉它们有多准确。将数字转换为浮点格式时,会将其舍入为该格式。当您进行加法、乘法或执行其他运算时,普通算术结果将四舍五入为格式。在各种操作过程中,这些舍入误差可能会复合或抵消,因此最终结果可能非常不准确或可能准确。确定哪个以及多少可能很困难。无论浮点格式多么精确,某些操作序列几乎总是会产生不准确的结果。精度并不能告诉您准确性。

脚注

1 有时,将 f 缩放到区间 [b p−1b p[,并相应地调整指数。这使得 f 始终是一个整数,因此它对于在浮点证明中使用数论很有用。有时,它被缩放为 [1/b, 1[.C 标准使用这个。在所有这些中,f 的第一个数字必须为非零。有时,允许第一个数字为零,这允许表示零和次正常数字。

评论

0赞 m615 11/6/2023
现在,有了你的解释,这个概念对我来说更清楚了;谢谢。