爱国者导弹浮动指向误差

2024-04-04

从计算机系统:程序员的角度http://csapp.cs.cmu.edu http://csapp.cs.cmu.edu

练习题2.51

我们在问题 2.46 中看到,爱国者导弹软件近似为 0.1,因为 x =

0.00011001100110011001100(binary). 

假设他们使用 IEEE 舍入到偶数模式来确定 x′ 为 0.1 的近似值,其中二进制小数点右侧有 23 位。

A. x′ 的二进制表示是什么?

from the solution at the back of book, 
Looking at the nonterminating sequence for 1/10, we can see that the 2 bits to the right of the rounding position are 1, and so a better approximation to 1/10 would be obtained by incrementing x to get x′ = 0.00011001100110011001101, which is larger than 0.1.

B. x′ − 0.1 的十进制近似值是多少?

The solution says it's

We can see that x′ − 0.1 has binary representation: 0.0000000000000000000000000[1100]
Comparing this to the binary representation of 1 , we can see that it is 2^−22 × 0.1 , which is around 2.38 x 10^-8

我对(B)的问题是我们如何得到

x' - 0.1 == 0.0 0000 0000 0000 0000 0000 0000[1100] ?

我的计算给出了 0.000 0000 0000 0000 0000 0000 0100 (大约是解决方案所说的两倍)


0.1 in 小数二进制表示是:0.000[1100]

对于问题 2.46 中的近似,有一个cutoff在位置 23 之后,以及问题 2.51 a 中四舍五入到偶数发生在位置 23。后者意味着: - 1)转到最近的值 - 或 2)如果正好在中间,则转到偶数。由于位置 24 ff 是11001100...这是情况 1),最接近的值是当位置 23 变为 1 时。原始值和近似值的位:

x     = 0.0001100110011001100110011001100110011001100...
x_246 = 0.00011001100110011001100  # cutoff
x_251 = 0.00011001100110011001101  # round to even - as asked in A)

区别x' - 0.1, i.e. x_251 - x,如 B) 中所问

  • 小数二进制

    x_251:   0.00011001100110011001101
    x:     - 0.0001100110011001100110011001100110011001100...
    fdiff:   0.0000000000000000000000000110011001100110011... or
    fdiff:   0.0 0000 0000 0000 0000 0000 0000[1100]
    
    --> this answers "question for (B) is that how do we get x' - 0.1 
          == 0.0 0000 0000 0000 0000 0000 0000[1100]"                            
    
  • 小数值

    ddiff = (1*2^-26 + 1*2^-27) + (1*2^-30 + A1*2^-31) + (...) + ...
          =     3*2^-27         +     3*2^-31         +    3*2^-35 + ...
          = 0.1*2^-22 = 2.384e-8  (sum of geometric serie)
    julia> @printf "%.40f" 0.1*2.0^-22
    0.0000000238418579101562513234889800848443
    

旁白:为什么有区别julia> @printf "%.40f" 0.1f0和上面的小数差ddiff?

0.1000000014901161193847656250000000000000
0.0000000238418579101562513234889800848443

0.1f0表示为IEEE 浮点值。位(julia> bits(f0.1f0)) ("00111101110011001100110011001101") 的含义如下:

0 01111011 10011001100110011001101
| |        | M = 1 + f
| | E = e - Bias = 123 - 127 = -4 --> V = M*2^-4 (right shift M by 4)
| sign

M:         1.10011001100110011001101
M/sh: 0.0001.10011001100110011001101
x_shifted: 0.000110011001100110011001101
x_251:     0.00011001100110011001101

--> 0.1 的移位近似值比 x_251 多 4 位。差值的十进制值x_shifted - x(如上计算)给出:0.1*2^-26。现在这两种表示法是合适的:

    julia> @printf "%.40f" 0.1*2.0^-26
    0.0000000014901161193847657077180612553028
    0.1000000014901161193847656250000000000000  # julia> @printf "%.40f" 0.1f0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爱国者导弹浮动指向误差 的相关文章

  • 如何创建二进制补丁?

    为二进制文件制作补丁的最佳方法是什么 我希望用户能够简单地应用 一个简单的patch应用程序会很好 在文件上运行 diff 只是给出Binary files differ 查看bsdiff and bspatch website http
  • 在Windows中比较2个二进制文件的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个工具来比较两个二进制文件 文件相当大 我在互联网上找到的一些免费软件或试用工具不方便用于大文件
  • 用 C 将位写入文件

    我有这个字符串 101 我想用 C 语言将其写入文件 而不是文本 101 等 8 位 x 字符 但直接使用字符串作为位 位 1 位 0 和位 1 这样文件将是3位 有可能吗 我在网上搜索并尝试这样做 char c 25 101 FILE b
  • 如果两种语言都遵循 IEEE 754,那么两种语言的计算会得到相同的结果吗?

    我正在将程序从 Scilab 代码转换为 C 特别是一个循环产生的结果与原始 Scilab 代码略有不同 这是一段很长的代码 因此我不会将其包含在问题中 但我会尽力总结下面的问题 问题是 循环的每一步都使用上一步的计算 此外 计算之间的差异
  • GraphQL 中的二进制

    根据关于标量的文档 https graphql org learn schema scalar types在 GraphQL 中 到目前为止还不支持二进制数据 根据上面的页面 可以定义自己的类型 如何在 GraphQL 中实现二进制标量 我
  • 为什么 -INT_MIN = INT_MIN 在有符号的二进制补码表示中?

    我仍然没有找到为什么最低的有符号负数没有等效的有符号正数的原因 为简单起见 我的意思是 3 位二进制数 100 是 4 但我们不能有符号格式的正 4 因为我们不能 它溢出了 那么我们如何知道补码 1000 是 4 1000 0000 是 1
  • 生成 xcframework 库时 xcodebuild 错误“不支持具有多个平台的二进制文件”

    我正在尝试从 MyFramework framework 文件生成 xcframework 文件 我正在运行以下命令 xcodebuild create xcframework framework MyFramework framework
  • 是否有将二进制数据打包成 UTF-16 字符串的标准技术?

    在 NET中 我有任意二进制数据存储在byte 例如图像 现在 我需要将该数据存储在string 旧 API 的 注释 字段 有没有标准技术packing将此二进制数据转换为string 我所说的 打包 是指对于任何相当大且随机的数据集 字
  • 为什么在 Javascript 中添加两位小数会产生错误的结果? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 的数学有问题吗 https stackoverflow com questions 588004 is javascripts math broken 为什么 JS 搞砸了这个简
  • 浮点等于的意外结果

    问题不在于为什么0 1 0 9不等于1 0 这是关于平等者的不同行为 有人可以解释为什么下面的示例的工作方式不同 float q 0 1f float w 0 9f float summ q w q w 1 0f False summ 1
  • 如何将十进制整数转换为十六进制整数? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions cout lt
  • 二进制浮点加法算法

    我试图理解二进制级别的 IEEE 754 浮点加法 我遵循了一些在网上找到的示例算法 并且大量测试用例与经过验证的软件实现相匹配 我的算法目前只处理正数 但是 我没有得到与此测试用例的匹配 0000100011110011011001001
  • 整数转浮点数

    这段代码的工作原理 posToXY Float gt Float gt Integer posToXY a b do let y a b round y 但这不起作用 posToXY Integer gt Integer gt Intege
  • 在 Linux 上将 libquadmath 与 C++ 链接

    我有一个示例代码 include
  • 为什么没有 2 字节浮点并且已经存在实现?

    假设我真的内存不足并且想要更小的范围 类似于short vs int 着色器语言已经支持half对于半精度的浮点类型 不仅仅是来回转换使值在 1 和 1 之间 即返回一个像这样的浮点数 shortComingIn maxRangeOfSho
  • 为什么 FLT_MIN 等于 0?

    limits h指定非浮点数学类型的限制 例如INT MIN and INT MAX 这些值是可以使用 int 表示的最大负值和最大正值 In float h 有定义FLT MIN and FLT MAX 如果您执行以下操作 NSLog f
  • 从 56 位二进制字符串创建 DES 密钥

    我有一个 56 位二进制字符串 我想将其用作 DES 加密的密钥 我在JCA文档网站上找到了以下代码 byte desKeyData byte 0x01 byte 0x02 byte 0x03 byte 0x04 byte 0x05 byt
  • 使用按位 OR 0 对数字进行取整

    我的一位同事偶然发现了一种使用按位或来对浮点数进行底数的方法 var a 13 6 0 a 13 我们正在谈论它并想知道一些事情 它是如何工作的 我们的理论是 使用这样的运算符将数字转换为整数 从而删除小数部分 与这样做相比 它有什么优势吗
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 为什么 printf 使用浮点和整数格式说明符打印随机值

    我在64位机器上写了一个简单的代码 int main printf d 2 443 所以 这就是编译器的行为方式 它将识别第二个参数为双精度型 因此它将在堆栈上压入 8 个字节 或者可能只是在调用之间使用寄存器来访问变量 d需要 4 字节整

随机推荐

  • Symfony2 自定义表单错误消息

    你能帮我了解如何使用 Symfony2 自定义表单中的错误消息吗 我想更改 HTML 布局 添加 div 类等 阅读指南 它给出了一段代码 可以放入一个名为的文件中fields errors html twig但它没有告诉将该文件放在哪里以
  • 在 c 函数内分配数组

    我正在尝试在函数内分配和初始化数组 但返回后似乎无法获取值 这是我最后一次几乎可行的尝试 include
  • 如何在 CodeIgniter 中计算具有特定年份日期的行数?

    我有以下查询 query this gt db gt query SELECT COUNT FROM iplog persons WHERE begin date LIKE 2014 我需要计算 2014 年 begin date 的列数
  • 如何在 OpenAPI 3.0 中全局设置 Accept header?

    我通过 SwaggerHub 设置了新的 OpenAPI 是否有一个选项可以强制执行某些操作Accept全局标题 我已经设置了Content Type关于回应 openapi 3 0 0 paths test path get respon
  • AirPlay 的音频输出路由

    我已经查看过 但找不到访问音频输出路由的方法 因此我可以检测音频是否通过 AirPlay 输出 这是我在 iOS 5 0 文档中找到的 kAudioSessionOutputRoute AirPlay 讨论 这些字符串用作与 kAudioS
  • 从 varchar 字段中仅选择单词的首字母

    我在一次采访中被问到 一个来自oracle sql的问题 这似乎是一个简单的问题 但我不知道如何回答 有人可以帮忙吗 如果某列中有 纽约是一座美丽的城市 这样的字符串 select column name from table name 将
  • 绝对定位的弹性盒不会扩展以适应内容[重复]

    这个问题在这里已经有答案了 正如您从下面的代码片段中看到的 查看小提琴 http jsfiddle net tekm28wy 绝对定位的柱状弹性盒不会扩展以适合其子级 例如 在 Chrome 中 它的宽度仅与最宽的子元素一样宽 高度与最短的
  • 为什么使用公共变量?

    变量 方法和类可以获得不同的安全级别 根据我的 C 经验 有 public内部的受保护的受保护的内部私人的 现在 我了解了将方法和类设为私有 内部或受保护的用途 但是变量呢 即使我将变量设置为私有 我也可以使用属性从不同的类中调用它 我一直
  • 计算变化率

    我有一个名为 yield 的数据集 yield lt data frame fruits c apples apples apples oranges oranges oranges pears pears pears year rep 2
  • xslt需要选择单引号

    我需要这样做
  • YouTube API 配额限制和可扩展的应用程序

    我目前正在开发一个需要通过 youtube 上传视频的应用程序 我计划通过 youtube API 在应用程序中分享视频 根据文档 在 YouTube 上分享视频需要 大约 16000 个单位 每个应用程序都有 500 万个单位的补充配额
  • C++ VS2013 调试器断点:未命中

    我有一个相对简单的 C 控制台项目 它执行一些计算并写入输出文件 我试图确定为什么输出文件没有正确的输出 相反 我一直在与调试器作斗争 由于某种原因我无法添加断点在某个函数的某一行之后 无法到达第 1106 行之后到第 1214 行 函数末
  • 获取模拟用户名

    我有一个类需要知道当前有效的用户名 Environment UserName or WindowsIdentity GetCurrent Name是为了那个 但是当启用模拟时 它们会返回LocalUser名称不是ImpersonatedUs
  • 如何使用 SQL 查询删除 PostgreSQL 中的所有模式?

    我需要删除数据库中的所有架构 除了public information schema以及那些LIKE pg 这是我发现的 这个变体似乎不起作用 CREATE OR REPLACE FUNCTION drop all RETURNS VOID
  • Snow Leopard 上的 PyObjc 和 Cocoa

    我即将开始我的 A 级计算项目 高中级别 该项目有望成为 Mac 操作系统的销售点应用程序 不幸的是 目前 Objective C 有点超出我的能力范围 如果我在项目中陷入困境 我没有人可以提供帮助 所以我可能会不及格这门课程 也无法进入大
  • 如何测试载波文件是否更改?

    我正在尝试测试代码中的图像是否随载波更改 但我找不到方法来执行此操作 即使文件无效 对象似乎也被标记为已更改 因此它并未真正更改 查看以下输出 rdb 1 job translated xliff
  • Java:计算两点之间的角度(以度为单位)

    我需要计算我自己的 Point 类的两点之间的角度 以度为单位 点 a 应为中心点 Method public float getAngle Point target return float Math toDegrees Math ata
  • Django REST Framework 自定义字段验证

    我正在尝试为模型创建自定义验证 以检查其start date在其之前end date事实证明这几乎是不可能的 我尝试过的东西 内置 Django 验证器 没有对此进行检查 我自己写的 就像这样 def validate date self
  • 更新 flutter 和 Xcode 后,Xcode 14.3 中缺少文件“libarclite_iphoneos.a”

    我有 flutter 项目 我正在尝试运行 iOS 版本 但在将 flutter 和 Xcode 更新到最新版本后出现错误 我使用 firebase core 插件 error Could not build the precompiled
  • 爱国者导弹浮动指向误差

    从计算机系统 程序员的角度http csapp cs cmu edu http csapp cs cmu edu 练习题2 51 我们在问题 2 46 中看到 爱国者导弹软件近似为 0 1 因为 x 0 000110011001100110