大家好,欢迎来到IT知识分享网。
ULP
百度上的资料非常少,我总结了我查到的相关资料,希望帮助到大家理解。若有解释不当的地方,欢迎指正!
ULP(Unit in the last place)是计算机科学中的一个误差单位。
想要理解什么是ULP就需要了解浮点数的原理,本篇文章不做解释,网上的资料很多,这里贴个链接:
浮点数的表示方法CSDN
下面开始介绍ULP
单个实数值的ULP定义与计算
定义:对于给定的浮点格式,特定实数值的 ulp 是与此实数值左右最近的两个浮点数的距离。
以IEEE754标准的32位浮点数为例。如果想表示实数值 0.1 是无法准确表示的,只能用最接近 0.1 的可以精确表示的浮点数来表示。这样的数有两个,设为A、B,它们的十六进制和十进制表示分别为:
A: 十六进制:0x3dcccccc 十进制:0.0536 B: 十六进制:0x3dcccccd 十进制:0.012
那么 0.1 的 ulp 就等于 |A – B| = 0.00000000
由上述计算可知,在 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。那么这个函数是个不合格的函数,也就是错误舍入的函数。
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 作为评判标准。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/139503.html