ULP(最后一位单位)和量子(IEEE 754)之间的区别

2024-03-20

From ULP 维基百科页面 https://en.wikipedia.org/wiki/Unit_in_the_last_place:

John Harrison 提出的另一个定义略有不同:ULP(x) 是两个最近的跨界浮点数 a 和 b 之间的距离(即,a ≤ x ≤ b 且 a ≠ b),假设指数范围没有上限。

来自 IEEE 754 2008:

2.1.44 量程:有限浮点表示的量程是一个单元在其有效数最后位置的值。这等于指数 q 的基数,当尾数被视为整数时使用该基数。

问题: 有什么区别ULP(约翰·哈里森的定义)和quantum(来自 IEEE 754)?

我的理解正确吗?double x可以计算为:

double ulp(double x)
{
        int exp;
        frexp( x, &exp );
        return ldexp( 0.5, exp-52 );
}
double quantum(double x)
{
        int exp;
        return ulp(frexp( x, &exp ));
}

ULP(约翰·哈里森的定义)和量子(来自 IEEE 754)有什么区别?

[edit]

OP's quantum()似乎不正确,始终返回1.11022e-16对于所有有限的x,即使当x是次正常的。

其余答案假设quantum()更像是quantum_alt()下面对于每个 [2 的幂 ... 2*2 的幂) 都有相同的结果。请注意[).

基数的幂

When x是基础力量这些定义仅在基数的有符号幂上有所不同 https://en.wikipedia.org/wiki/Unit_in_the_last_place#Definition

For binary64 https://en.wikipedia.org/wiki/Double-precision_floating-point_format,考虑何时x是 2 的幂。下一个较大的 FP 值是x + u下一个较小的值是x - u/2.

John Harrison: "distance between the two closest straddling floating-point numbers a and b (i.e., those with a ≤ x ≤ b and a ≠ b)" implies a is the smaller value and x == b and ULP is u/2.1

量子:“表示是一个单位在其有效数最后位置的值”意味着ULP is u.

距离b-a是“量子”定义的 1/2;a处于较小的指数子范围内x并且其最后一个有效位置是一半x.


适用性

定义也有所不同,两者都适用于浮点值,但不适用于quantum with real https://en.wikipedia.org/wiki/Real_number诸如 1/7、√2、π 等值。@埃里克·波斯特皮斯基尔 https://stackoverflow.com/questions/66637497/difference-between-ulp-unit-in-the-last-place-and-quantum-ieee-754/66640220#comment117800427_66637497


在某些情况下,两个 OP 函数都是错误的。

ulp()根据约翰·哈里森的说法,当x是 2 的幂、零或次正规数。
备用

#include <math.h>

// Using the convention ULP(x) == ULP(-x)
// Adjust if you want a signed result.
double ulp_JH(double x) {
  x = fabs(x);
  if (isfinite(x)) {
    double lower = nextafter(x, -1.0); // 1st FP number smaller than x   
    return x - lower;
  }
  return x; // NAN, infinity
}

OP's quantum()x是零或次正常值。

double quantum_alt(double x) {
  x = fabs(x);
  if (x < DBL_MAX) {
    double higher = nextafter(x, DBL_MAX); // 1st FP number larger than x   
    return higher - x;
  }
  if (isfinite(x)) {
    double lower = nextafter(x, 0.0); // Special case for DBL_MAX
    return x - lower;
  }
  return x; // NAN, infinity
}

1 Except when x == DBL_TRUE_MIN. In that case. ULP(DBL_TRUE_MIN) is DBL_TRUE_MIN.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ULP(最后一位单位)和量子(IEEE 754)之间的区别 的相关文章

随机推荐

  • 是否有获取最新 Microsoft Edge 版本号的链接?

    我正在寻找一个链接来获取 Microsoft Edge 的最新驱动程序版本号 类似于 Google Chrome 的链接 https chromedriver storage googleapis com LATEST RELEASE ht
  • Swift 3:在 collectionView 中缓存图像

    我目前正在开发我的应用程序 将其更新为与 Swift 3 兼容 但还剩下一个问题 以前 我的图像缓存工作得很好 但自从更新后UIImageView获取图像时不会填充 s 这是代码 在 cellForItemAt 功能 if let img
  • 资源未发现异常?

    我从 android 市场收到崩溃报告 android content res Resources NotFoundException Resource ID 0x 我每周收到大约 17 个这样的东西 它指出我的代码中的以下内容 conte
  • 如何将 JDK GregorianCalendar 对象日期与 Joda 一起使用

    我正在尝试使用 Joda 库 因为使用 Java 本机方法计算周期是一件令人头疼的事情 而且我所有的尝试都给出了不精确的结果 我看过这个样本 int n Days daysBetween start toLocalDate end toLo
  • 如何使用外部vue npm组件

    我是 Vue js 的新手 目前正在尝试在现有解决方案中使用它 我不可能使用 vue 文件 它是一个独立的系统 不使用 webpack 我需要本地文件才能使其正常工作 在下面的例子中 我在线使用了 js 我想使用这个日期选择器 https
  • 在 RAFT 中,是否有可能对某个日志条目达成多数共识,但该条目尚未提交?

    考虑一下官方的这个模拟筏网页 https raft github io Why is term 2 index 1尽管没有承诺S2 leader S3 and S4同意日志吗 我运行了几分钟以确保所有通信均已完成 奇怪的是 如果我再添加一个
  • 内容安全策略:“img-src'self'数据:”

    我有一个应用程序 用户可以在其中复制图像 URL 将其粘贴到输入中 然后图像将加载到框中 但我的应用程序不断触发此消息 拒绝加载图像 LOREM IPSUM URL 因为它违反了以下内容安全策略指令 img src self data 这是
  • Autohotkey 错误的击键发送到控制台

    我正在尝试理解这个错误并寻找解决方法 使用这个脚本 NoEnv SingleInstance force SendMode Input Alt t to send keystrokes t Send It send the correct
  • 张量流将预测作为 b64 输出顶部结果

    我有一个 Keras 模型 我将其转换为张量流服务模型 我可以成功地将预训练的 keras 模型转换为采用 b64 输入 预处理该输入并将其提供给我的模型 我的问题是我不知道如何获取我得到的预测数据 这是巨大的 并且只导出最高结果 我正在进
  • 如何设置 Eclipse/RCP 装饰器的颜色?

    我在 Eclipse RCP 应用程序中向我的树查看器项目添加了一个装饰器插件 xml
  • 如何从 bash 脚本发送 control+c?

    我在 bash 脚本中启动多个屏幕 然后运行 djangorunserver命令他们每个人 我也希望能够以编程方式阻止它们 这需要我发送Control c to runserver 如何从 bash 脚本发送这些击键 Ctrl C send
  • 在 Intellij 内的项目之间共享数据库

    我使用 Intellij 来检查数据库 运行 sql 查看表中的数据等 这一切都工作正常 但我唯一缺少的是能够一次定义这些数据源并在我的所有项目中查看它们 即我可以在其他项目之间共享它们项目 而不必为新项目重新定义它们 这在 Intelli
  • 任何嵌入式文档查看器

    我希望在我的 CakePHP 应用程序中包含一个文档查看器 用于上传文档 我想要一个支持 Microsoft Word DOC 和 DOCX Microsoft PowerPoint PPT 和 PPTX 和 Adob e 便携式文档格式
  • 如何使用 lambda 获取哈希映射中值的键数

    我有一个哈希图 Map
  • Postgresql UNION 花费的时间是运行单个查询的 10 倍

    我试图获取 postgresql 中两个几乎相同的表之间的差异 我当前运行的查询是 SELECT FROM tableA EXCEPT SELECT FROM tableB and SELECT FROM tableB EXCEPT SEL
  • postgresql中插入表名设置示例

    Mysql查询 如何将查询改为postgresql INSERT into tablename SET a 10 b 20 c 30 PostgreSQL 不支持语法 INSERT SET mysql 支持 但您可能需要另一个系统 具有完整
  • 编译器警告 - 建议使用括号作为真值

    当我尝试编译下面的代码时 我收到此警告 warning suggest parentheses around assignment used as truth value 为什么会出现这种情况 我相信这是一个相当常见的习语 我什至之前在我的
  • 文件是否使用 AES 加密? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如果我知道算法是 AES 有没有办法判断文件是否已经加密 我本来就是对其进行加密的人 因此解密或加密的信息不是问题 但是 如果您尝试解密尚未加密的文件
  • 如何在与 gcc 链接时绕过“多个定义的符号”

    我使用的是具有 gcc 2 95 3 的旧系统 我必须链接两个对象 尽管它们彼此无关 但它们每个都有相似的命名方法 我无法重命名它们中的任何一个 但我希望有一种方法来构建它们 以免链接器抱怨 它所抱怨的方法都是由对象内的类在内部调用的 我能
  • ULP(最后一位单位)和量子(IEEE 754)之间的区别

    From ULP 维基百科页面 https en wikipedia org wiki Unit in the last place John Harrison 提出的另一个定义略有不同 ULP x 是两个最近的跨界浮点数 a 和 b 之间