matlab 我不明白机器Epperly是什么意思

agxfikkp  于 7个月前  发布在  Matlab
关注(0)|答案(2)|浏览(65)

我正在学习Matlab和计算机算术,但我很难理解机器事件的概念。我希望你能像个孩子一样简单地解释一下。“2.2204e-16”是什么意思,当我们添加“1”时会有什么问题,它的目的是什么?
我只认为,有了64位的机器计数器,我们就知道一个数字精确到第十六位,但我有很多疑问。

lh80um4z

lh80um4z1#

'2.2204e-16'是什么意思,当我们添加'1'时有什么问题,它的目的是什么?
使用典型的64-bit floating point,x1=about 0.0000000000000022204('2.2204e-16'或2.2204*10-16)或正好2-52。
Epper:1和在给定浮点类型中可表示的大于1的最小规格化值之间的差。
...
在[0.5和1.0]之间,64位浮点步长为2-53。
在[1.0和2.0]之间,64位浮点步长为2-52。
在[2.0和4.0]之间,64位浮点步长为2-51。
在[4.0和8.0]之间,64位浮点步长为2-50。
...
我们知道一个数字精确到十六位数,但我有很多疑问。
典型的浮点数,如果以2为基数:±b. bbbbbbb... * 2指数精确到53 * 二进制 * 位。
也就是 about 15.95或log 10(253)decimal digits ±d.ddddddd... * 10 exponent。

nafvub8i

nafvub8i2#

非零有限浮点数表示为±f·b**e,其中:

  • B 是作为格式的 * 基数 * 的固定整数(最常见的是2),
  • f 是以 b 为基数的数字,具有 p 个数字,并且
  • e 是一定区间内的整数指数,emin ≤ eemax。
  • f* 称为 significandp 是格式的 precisionf 被限制在某个区间内。目前,我们取1 ≤ f < b。例如,当 b = 2且 p = 53(通常用于double的格式的精度)时,数字1表示为:
  • +1.0000000000000000000000000000000002 20。该公式为:

即“1.”后跟52个“0”数字,因此它是以2为基数的53位数。
所谓的机器epsilon是我们能做出的最小改变,以得到下一个可表示的数字。下一个数字是:

  • +1.000000000000000000000000012 20。该公式为:

所以区别在于:

    • +0.0000000000000000000000000000012 20。

即2−52·20 = 2−52 ≈ 2.220446049·10−16。
这是最小精确度单位(ULP)1。
注意,ULP取决于数字的一般大小,具体地取决于使用哪个指数来表示它。数字32,768用指数15表示:

  • +1.00000000000000000000000000000000002 215。

下一个可表示的数字是:

  • +1.0000000000000000000000000012 215。这是一个很好的解释。

这意味着不同之处在于:

  • +0.0000000000000000000000000000012 215。这是一个很好的解释。

即2−52·215 ≈ 7.275957614·10−12。
因此,32,768的ULP约为7.275957614·10−12。
补充说明
我只是认为,在64位的epsilon机器上,我们知道一个数字精确到第16位,但我有很多疑问。
格式中的位数只能说明格式中数字的 * 精度 *,而不能说明它们的 * 准确度 *。将数字转换为浮点格式时,它将舍入为该格式。当您进行加法、乘法或其他运算时,普通算术结果将舍入为该格式。在各种运算过程中,这些舍入误差可能会复合或抵消。因此最终的结果可能非常不准确,也可能很准确。要确定哪一个是准确的以及准确到什么程度是很困难的。有一些操作序列几乎总是产生不准确的结果,无论浮点格式有多精确。精度并不能告诉您准确性。

脚注

1有时,f 会缩放到区间[B**p−1,b**p],并相应地调整指数。这使得 f 始终为整数,因此它对于在浮点数证明中使用数论很有用。有时,它会缩放到[1/b,1]。C标准使用这种方式。在所有这些情况下,f 的第一位必须非零。有时,允许第一位为零,这允许表示零和 * 次正规 * 数。

相关问题