ULP

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

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

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

浮点数的表示方法CSDN

下面开始介绍ULP


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

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

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

A:
十六进制:0x3dcccccc
十进制:0.099999994039536B:
十六进制: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定义以及计算

注:

  1. 这里说的函数指的是计算机程序中的函数,至于其定义能否扩展到数学中的函数我不太清楚。
  2. 下文所讨论的函数都是返回值为浮点数的函数,因为整数计算不存在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 为判断函数的标准呢。这个也很好解释。
函数的精确解设为:
resres res
精确解左边的最近的浮点数设为:
res左res_左 res左​
精确解右边的最近的浮点数设为:
res右res_右 res右​
那么一个好的函数,当然要尽可能使误差最小化:

errormin=min(∣res−res左∣,∣res−res右∣)error_{min} = min(|res - res_左|, |res - res_右|) errormin​=min(∣res−res左​∣,∣res−res右​∣)

由下图

可知,在任何情况下,最小误差都不会大于 0.5 ulps,也就是:
MAX(errormin)=0.5ulpsMAX(error_{min}) = 0.5 ulps MAX(errormin​)=0.5ulps

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

ulp(unit in the last place)是什么意思相关推荐

  1. Java Math类方法介绍之史上最全

    Java Math类方法介绍之史上最全 开发中用到了Java Math类的方法,故温习记录如下. /*** 常量*/System.out.println("------>" ...

  2. java库函数-----Math库函数(每日一更)

    java库函数-----Math库函数(每日一更) 目录区 Java中的数学函数的应用:Math.sin,Math.exp. 源码区 /** Copyright (c) 1994, 2013, Ora ...

  3. 【体系结构】IEEE754浮点数标准学习与机器码表示总结

    怎么上传了,排版和Typora差这么多-头疼,就这样吧- 一 IEEE754浮点数标准学习 没想到本科不喜欢.瞎学的祭祖,现在还是得重新.认真地重学一遍."不喜欢"果然无法成为拒绝 ...

  4. 12.CUDA编程手册中文版---附录H数学方法

    附录H 数学方法 更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划 参考手册 ...

  5. Java常见问题3:周期之谜

    谜24 byte是有符号的.范围是-128 - 127. 而0x90是int类型. 比較的时候.不相等. 假设想让其相等,须要进行类型转换:(byte & 0xff) 或者 (byte)0x9 ...

  6. 写算子单元测试Writing Unit Tests

    写算子单元测试Writing Unit Tests! 一些单元测试示例,可在tests/python/relay/test_op_level3.py中找到,用于累积总和与乘积算子. 梯度算子 梯度算子 ...

  7. DPU(Data Processing Unit)数据处理器

    DPU(Data Processing Unit)数据处理器 DPU:5G边缘云 5G时代带来通信带宽的巨大提升,更多的带宽使能更多的应用.数据量的迅猛增多,服务器网络带宽的快速增长,都已经远超计算能 ...

  8. 视频处理单元Video Processing Unit

    视频处理单元Video Processing Unit VPU处理全局视频处理,它包括时钟门.块复位线和电源域的管理. 缺少什么: •完全重置整个视频处理硬件块 •VPU时钟的缩放和设置 •总线时钟门 ...

  9. java unit包_Java接入UNIT文本对话处理源码详解

    应邀一位网友的想法,想实现调用UNIT接口,实现文字对话功能,特整理一下内容分享给大家. 此功能对于大神来说非常简单,但是对于新手理解代码处理逻辑,并且如何解析UNIT返回参数的处理,还是有一定的帮助 ...

  10. POJ1022 Packing Unit 4D Cubes

    题目来源:http://poj.org/problem?id=1022 题目大意: 有一些4维的单位体积的立方体盒子,每个立方体有8个面.要用一个大的4为盒子将它们包起来,求最小的大盒子体积. 输入: ...

最新文章

  1. NetTiers学习笔记05---使用自定义存储过程
  2. Spring boot模板引擎缓存
  3. 6 Git 分支 - 变基
  4. 牛客网-《剑指offer》-跳台阶
  5. Swin-Transformer-Object-Detection V2.11.0环境搭建(一)
  6. multisim常用d触发器_怎么在multisim找D触发器
  7. 教程丨一文了解如何在OpenSea上创建自己的NFT商店
  8. 405 not allowed 问题排查
  9. WinEdit编辑器中中文乱码
  10. 数字ic设计流程以及相关工具
  11. MyBatis一发入魂之插入操作
  12. python中randint是什么意思_python中random.randint和random.randrange的区别详解
  13. [树状数组] Galahad
  14. 记录达梦一次IO问题的分析
  15. QT ui添加菜单栏和工具栏
  16. mysql聚簇索引和非聚簇索引
  17. Spring个人笔记
  18. 负数在java_在负数中使用Java纪元秒
  19. Linux内核机制总结内存管理之内存耗尽杀手(二十四)
  20. 2022年1月23日学习总结

热门文章

  1. C语言标准库中round函数
  2. 古典乐器网页设计成品 大学生音乐网站制作模板 大学生静态音乐HTML网页源码 dreamweaver网页作业 简单网页课程成品
  3. 【学习记录】SPSS问卷调查表分析法
  4. intel服务器芯片组C,Intel C232芯片组 华硕P10S-C售2399元
  5. Centos8上安装中文字符集zh_CN.UTF-8
  6. 当Linux配置zh_CN.UTF-8 ,中文还是显示乱码解决办法
  7. html制作中英文双语菜单,CSS实现的中英文双语菜单效果代码
  8. office2007加载缓慢_「excel2003打开2007」excel2007打开很慢怎么办 - seo实验室
  9. ExpandableListQQ好友列表
  10. 全栈学习的知识点梳理(一)