ulp(unit in the last place)是什么意思

您所在的位置:网站首页 moreover什么意思中文意思是什么 ulp(unit in the last place)是什么意思

ulp(unit in the last place)是什么意思

2023-06-09 00:36| 来源: 网络整理| 查看: 265

ULP

百度上的资料非常少,我总结了我查到的相关资料,希望帮助到大家理解。若有解释不当的地方,欢迎指正!

ULP(Unit in the last place)是计算机科学中的一个误差单位。

想要理解什么是ULP就需要了解浮点数的原理,本篇文章不做解释,网上的资料很多,这里贴个链接:

浮点数的表示方法CSDN

下面开始介绍ULP

单个实数值的ULP定义与计算

定义:对于给定的浮点格式,特定实数值的 ulp 是与此实数值左右最近的两个浮点数的距离。

以IEEE754标准的32位浮点数为例。如果想表示实数值 0.1 是无法准确表示的,只能用最接近 0.1 的可以精确表示的浮点数来表示。这样的数有两个,设为A、B,它们的十六进制和十进制表示分别为:

A: 十六进制:0x3dcccccc 十进制:0.099999994039536 B: 十六进制:0x3dcccccd 十进制:0.10000000149012

那么 0.1 的 ulp 就等于 |A - B| = 0.00000000745076

如果计算机 1 使用向下近似的方法用 A 来表示 0.1 那么误差 = 0.1 - 0.099999994039536 = 0.000000005960464 = (0.000000005960464 / 0.00000000745076) * ulp ≈ 0.8 ulps

如果计算机 2 使用向上近似的方法用 B 来表示 0.1 那么误差 = 0.10000000149012 - 0.1 = 0.00000000149012 = (0.00000000149012 / 0.00000000745076) * ulp ≈ 0.2 ulps

由上述计算可知,在 IEEE754 标准的 32 位浮点数的前提下,计算机 1 关于 0.1 的计算误差为 0.8 ulps,计算机 2 关于 0.1 的计算误差为 0.2 ulps。

函数中的ulp定义以及计算

注:

这里说的函数指的是计算机程序中的函数,至于其定义能否扩展到数学中的函数我不太清楚。下文所讨论的函数都是返回值为浮点数的函数,因为整数计算不存在ulp误差。

定义:当讨论一个函数的整体准确性而不是某个特定实数值时,所引用的 ulps 的数量是任何参数下最坏情况的误差。 如果某个函数的错误始终小于0.5 ulps,则该函数始终返回最接近精确结果的浮点数,这样的函数是正确舍入的。

逐句解释一下:

第一:“当讨论一个函数的整体准确性而不是某个特定实数值时”

这句很好理解,之前讨论的是单个实数值的 ulp,也就是计算单个数值的误差。但是当我们评判一个函数(方法)的准确性时,就不能用单个数值的 ulp 来代表整个函数的准确性,所以需要对一个函数的 整体准确性 进行定义。

第二:“所引用的 ulps 的数量是任何参数下最坏情况的误差”

首先,如何理解 “ulps 的数量” 。ulps 就是 ulp 的复数形式。上文中提到的计算机 1、2 在计算 0.1 的时候产生的误差分别是 0.8 ulps 和 0.2 ulps。可以看成是 0.8个ulp 和 0.2个ulp。这里的 0.8 和 0.2 就是 ulps 的数量。

理解了ulps 的数量之后,再理解整句话就简单多了。函数都有输入和输出嘛,不同的输入一般对应不同的输出,所以也就对应着不同的误差大小。假设某一个函数在任何输入下产生的输出误差都不会大于 0.5 ulps ,那么这个函数在 “任何参数下最坏情况的误差” 就是 0.5 ulps!这个函数的 “所引用的 ulps 的数量 就是 0.5 ulps!

第三:“如果某个函数的错误始终小于0.5 ulps,则该函数始终返回最接近精确结果的浮点数,这样的函数是正确舍入的。”

理解了上面的内容后,这句话也比较好理解了。对于一个函数,不同的输入会产生不同的误差,如果函数在任何情况下产生的误差总是小于 0.5 ulps。那么说明这个函数总是能够返回最接近精确结果的近似值。这样的函数是正确舍入的。

那什么是错误舍入的函数呢,就是当这个函数有时候的误差小于 0.5 ulps 有时候的误差大于 0.5 ulps。那么这个函数是个不合格的函数,也就是错误舍入的函数。

为什么以 0.5 ulps 为判断函数的标准呢。这个也很好解释。 函数的精确解设为: r e s res res 精确解左边的最近的浮点数设为: r e s 左 res_左 res左​ 精确解右边的最近的浮点数设为: r e s 右 res_右 res右​ 那么一个好的函数,当然要尽可能使误差最小化:

e r r o r m i n = m i n ( ∣ r e s − r e s 左 ∣ , ∣ r e s − r e s 右 ∣ ) error_{min} = min(|res - res_左|, |res - res_右|) errormin​=min(∣res−res左​∣,∣res−res右​∣)

由下图 在这里插入图片描述 可知,在任何情况下,最小误差都不会大于 0.5 ulps,也就是: M A X ( e r r o r m i n ) = 0.5 u l p s MAX(error_{min}) = 0.5 ulps MAX(errormin​)=0.5ulps

所以以0.5 ulps 作为评判标准。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3