32 位浮点数相加。

2023-12-06

关于浮点数,我学到的东西比我想知道的还要多。

可以说我需要添加:

1 10000000 00000000000000000000000

1 01111000 11111000000000000000000

2的补码形式。

第一位是符号,接下来的 8 位是指数,最后 23 位是尾数。

在不转换为科学记数法的情况下,如何将这两个数字相加?你能一步步走完吗?

这东西有什么好的资源吗?视频和练习示例会很棒。


您必须缩放数字以使它们具有相同的指数。然后添加尾数字段,并在必要时对结果进行标准化。

哦,是的,如果它们是不同的符号,您只需调用减法函数即可:-)

让我们用十进制做一个例子,因为它更容易理解。我们进一步假设它们仅存储小数点右侧的八位数字(并且数字在 0 和 1 之间)。

将两个数字相加:

sign  exponent  mantissa  value
   1        42  18453284  + 0.18453284 x 10^42
   1        38  17654321  + 0.17654321 x 10^38

将这些数字缩放到最高指数给出了可以添加尾数字段的内容:

sign  exponent  mantissa  value
   1        42  18453284  + 0.18453284 x 10^42
   1        42      1765  + 0.00001765 x 10^42
   =        ==  ========
   1        42  18455049  + 0.18455049 x 10^42

那里有你的电话号码。这也说明了如何因移动而损失准确性。例如,IEEE754 单精度浮点数将具有:

1e38 + 1e-38 = 1e38

例如:

#include <stdio.h>
int main (void) {
    float f1 = 1e38;
    float f2 = 1e-38;
    float f3 = f1 + f2;
    float f4 = f1 - f3;
    printf ("%.50f\n", f4);
    return 0;
}

就溢出发生的情况而言,这是我提到的标准化的一部分。让我们添加99999.9999 to 99999.9993。由于它们已经具有相同的指数,因此无需缩放,因此我们只需添加:

sign  exponent  mantissa  value
   1         5  99999999  + 0.99999999 x 10^5
   1         5  99999993  + 0.99999999 x 10^5
   =        ==  ========
   1         5 199999992  ???

您可以在这里看到我们有进位情况,因此我们无法将该进位放入数字中,因为限制为八位数字。然后我们要做的就是将数字向右移动,以便我们can插入进位。由于该移位实际上是除以十,因此我们必须增加指数来抵消这一点。

So:

sign  exponent  mantissa  value
   1         5 199999992  ???

becomes:

sign  exponent  mantissa  value
   1         6  19999999  + 0.19999999 x 10^6

实际上,这不仅仅是简单的右移,因为您需要四舍五入到最接近的数字。如果移出的数字是五或更多,则需要在左边的数字上加一。这就是我选择的原因99999.9993作为第二个数字。如果我添加了99999.9999就其本身而言,我最终会得到:

sign  exponent  mantissa  value
   1         5 199999998  ???

在右移时,会触发相当多的向左进位:

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

32 位浮点数相加。 的相关文章

  • float 和 double 精度相关的概念

    为什么精度float小数点后最多 6 位 精度double小数点后最多15位 任何人都可以给一个数学解释 of it 说一下精度float or double是一些小数位数是草率的术语 float and double通常使用 IEEE 7
  • C 中浮点数的比较

    我有一个double打印为0 000000我试图将其与0 0f 不成功 为什么这里有区别呢 确定双精度数是否为零的最可靠方法是什么 确定它是否足够接近零以将其打印为0 000000精确到小数点后六位 例如 fabs d lt 0 00000
  • _ftol2_sse,有更快的选择吗?

    我有调用很多的代码 int myNumber int floatNumber 这总共占用了我大约 10 的 CPU 时间 根据分析器 虽然我可以就这样 但我想知道是否有更快的选择 所以我尝试四处搜索 并偶然发现 http devmaster
  • 尝试在整数后添加字符然后打印结果时出现奇怪的结果

    我正在尝试创建一个简单的欧姆定律计算器 所以我们的想法是你可以填写两个变量 然后它会计算第三个变量 当我创建这个程序时 我发现了一个小问题 我不明白它是如何发生的 不幸的是我无法找到答案 我尝试打印一个显示完整计算的字符串 用户填写的两个变
  • 对浮点数求反总是安全的吗

    考虑 double f foo double g f where foo 可以返回分配给的任何内容f is double g f 在 C 和 C 中安全吗 对于 IEEE 754 类型 显然是这样 但 C 和 C 并不限制浮点实现 与 Ja
  • 安全浮点除法

    我的代码中有一些地方我想确保 2 个任意浮点数 32 位单精度 的除法不会溢出 目标 编译器不保证 足够明确 对 INF INF 的良好处理 并且 不完全保证 IEEE 754 的异常值 可能未定义 并且目标可能会改变 另外 我无法对这几个
  • 当计算结果在 Linux 中产生非正规数时刷新为零

    我的 C 代码中的计算正在产生逐渐下溢 当发生这种情况时 程序将以 SIGFPE 终止 当计算产生逐渐下溢 非正常 时 如何将结果刷新为零 而不终止执行 我正在一台 redhat linux 机器上工作 谢谢 您还没有指定架构 我猜测它是一
  • Visual Studio 将 1.1 扩展为 1.1000000000000001

    至少对我来说 这是有史以来最奇怪的 Visual Studio 2010 行为 我正在开发 MVC3 项目 我从另一个项目 也包括 VS2010 MVC1 如果重要的话 复制了一行代码 如下所示 target height height 1
  • IEEE-754 32 位(单精度)指数 -126 而不是 -127

    我知道我是否有这样的号码 1 1001 0001 0011 0011 0000 0001 0101 000 1 sign bit 8 bit biased exponent 23 bit fraction mantissa 我可以通过从有偏
  • 单元测试(有时)会因为浮点不精确而失败

    我有课Vector代表 3 维空间中的一个点 这个向量有一个方法normalize self length 1 将矢量缩小 放大为length vec normalize length length 该方法的单元测试有时由于浮点数的不精确性
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • Python 丰富比较的行为(或者,当 Decimal('100.0') < .01 时)

    所以我有一个班轮 import decimal h decimal Decimal 100 0 h gt 01 h lt 01 h gt 01 h lt 01 它所做的只是创建一个包含 100 0 的 Decimal 对象 并以各种方式将其
  • 整数转浮点数

    这段代码的工作原理 posToXY Float gt Float gt Integer posToXY a b do let y a b round y 但这不起作用 posToXY Integer gt Integer gt Intege
  • 如何判断我是在 64 位 JVM 还是 32 位 JVM 中运行(在程序内)?

    如何判断应用程序运行的 JVM 是 32 位还是 64 位 具体来说 我可以使用哪些函数或属性来在程序中检测到这一点 对于某些版本的 Java 您可以使用标志从命令行检查 JVM 的位数 d32 and d64 java help d32
  • 如何处理 PHP 中浮点数的奇怪舍入

    众所周知 浮点运算并不总是完全准确 但是如何处理它的不一致之处呢 As an example in PHP 5 2 9 this doesn t happen in 5 3 echo round 14 99225 4 14 9923 ech
  • 什么时候应该使用双精度而不是十进制?

    我可以说出使用的三个优点double or float 代替decimal 使用更少的内存 速度更快 因为处理器本身支持浮点数学运算 可以表示更大范围的数字 但这些优点似乎只适用于计算密集型操作 例如建模软件中的操作 当然 当需要精度时 例
  • AXI4 流接口:如何在 HLS 中管理浮点数组以生成硬件加速器并在 RTL 项目中安全地连接它们?

    最后 我想做的是使用 Vivado Design Suite 中具有单精度浮点数组的流接口来构建硬件加速器 HLS 用户指南UG902 http www xilinx com support documentation sw manuals
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 在 64 位 Windows 上运行 32 位可执行文件时出现问题

    如果允许的话 我会添加 500 个我自己的代表作为赏金 我在用着wkhtml转pdf http wkhtmltopdf org 将 HTML 网页转换为 PDF 这在我的 32 位开发服务器上完美运行 不幸的是 我无法运送我的机器 p 但是
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方

随机推荐

  • 函数参数 dtype 声明不起作用?

    为什么这不返回 12 号应该连接两个字符串 而不是相加 def foo a str b str print a b foo 1 2 3 这不是注释的用途 注释是metadata 不是 Python 转换数据的指令 来自函数定义参考文档 参数
  • 如何使我的 Linq to Sql 实体实现 INotifyPropertyChanged

    我在 Linq to sql 设计器中手动创建了一些类 在查看 xx designer cs 文件时 该类没有实现 INotifyPropertyChanged 接口 如果我通过从服务器资源管理器拖动来创建实体 则此方法有效 有谁知道这是为
  • 两个密度图之间的差异

    有没有一种简单的方法来绘制两个概率密度函数之间的差异 我可以在同一个图上一起绘制数据集的 pdf 都是具有大约 11000 个值的一维向量 以了解重叠 差异 但如果我能看到以下图 那对我来说会更有用区别 类似于以下内容 尽管这显然不起作用
  • QuickBlox 不发送 APNS

    突然 我在通过 QuickBlox 发送 APNS 时遇到错误 这很奇怪 因为它之前工作得很好 用户登录后 我使用 TRegisterSubscriptionWithDelegate 为 APNS 注册它 发送 APNS 时错误是 没有收件
  • 使用 PowerShell 处理 Java CLI 应用程序生成的错误

    我使用 PowerShell 调用 Java CLI 应用程序 我希望能够捕获 Java 错误并在 PowerShell 中处理它们 我正在通过尝试获取 Java 版本来模拟这一点 如果我使用有效的参数 version version pr
  • 在 Asp.net 中创建 pdf 文件

    字符串s 姓名 恩恩恩 年龄 DD 我需要将此字符串转换为 pdf 文件 有人可以帮我吗 iTextSharp 表格简介 NET 框架不包含任何处理 PDF 文件的本机方法 因此 如果您想要生成或使用 PDF 文件作为 ASP NET We
  • Javascript:如何获取 p 标签内的文本字符串数组

    假设我有一个带有很多 p 标签的字符串 var myString p Some text p p Some more Some more text p p And even some more text p 如何获取一个数组 数组中的每个项
  • Git中添加但未提交的已删除文件可以恢复吗? [复制]

    这个问题在这里已经有答案了 我是 git 的新手 我刚刚犯了一个愚蠢的错误 我通过 rm 命令删除了一些重要的文件 但是 我确实使用 git add 来添加这些文件 但没有提交 删除尚未添加 那么有什么办法可以恢复这些被删除的文件呢 任何建
  • 检查 RichTextBox 上选定的文本是否全部粗体

    如何检查 RichTextBox 上选定的文本是否全部粗体 例如 asdasdasdasd 这并不都是粗体 我都很大胆 这都是粗体 这是我编写的代码 它可以检查是否全部粗体 但速度很慢 因为它使用一一检查字符Selection Start
  • 初始化 SSL 和 libcurl 并出现“内存不足”

    我打算使用 C 程序使用 libcurl 和 openssl 执行 https 请求 我初始化了 libcurlcurl global init CURL GLOBAL ALL 如文档中所述 然后我用一个curl easy处理我初始化的内容
  • 将 std::cout 重定向到 QTextEdit

    是否可以 更重要的是如何 将输出流重定向到 QTextBox 所以如果我写std cout lt lt test 应用程序中的任何位置它都会被重定向到我定义的文本框吗 我尝试了显而易见的方法 其中 ui textEdit 是指向文本编辑框的
  • 如何限制对 PHP 文件的访问?

    我想限制对我的服务器上的 PHP 文件的访问 该 PHP 文件从 HTTP GET 请求获取数据并将其附加到文件中 简单的 但我不希望执行此 PHP 文件 除非 HTTP 请求是从我开发的智能手机应用程序中生成的 我不想单独验证每个用户的身
  • 如何禁用客户端 GRPC 服务器证书主机名验证?

    目前我正在为 gRPC 客户端设置通道身份验证 如下所示 std shared ptr
  • 在matlab中设置对象数组的对象属性值

    我创建了一个对象数组 我想在向量运算中分配一个属性值 而不使用 for 循环 不幸的是我得到一个错误 问题的简化示例 classdef clsMyClass lt handle properties dblMyProperty1 end m
  • 将四位数年份值转换为 Date 类

    我的数据集中有一个整数列 其中有四位数字的年份值 例如 c 2001 2002 2002 2002 2003 2005 我尝试将四位数年份转换为班级Date using as Date year lt as Date as characte
  • PHP 中是否有 shell_exec 和 proc_open 的替代方案?

    我好像不能用shell exec or proc open在我的共享服务器上 当我尝试使用它时收到的消息是 警告 出于安全原因 第 4 行 home georgee public html admin email php 中的 shell
  • Tkinter 文档与 PEP 8 相矛盾

    PEP 8 states 应避免通配符导入 来自 import 因为它们使命名空间中存在哪些名称变得不清楚 从而使读者和许多自动化工具感到困惑 尽管如此官方文档是矛盾的 要使用 Tkinter 您只需要一个简单的导入语句 import tk
  • 整个应用程序的通用页脚 [Android]

    好吧 我想知道这是否可以做到 我所需要的只是一个常见的页脚 如栏 其中将包含将要显示的广告 我想知道是否有任何方法可以使我的应用程序的这一部分成为通用的 我知道包含标签 但所做的只是在引用它的任何地方添加特定的布局 这样做的作用是 每次我从
  • 来自 x509 中字符缓冲区的 EVP_PKEY (PKCS7)

    我有一个 DER 证书 我正在从中检索 unsigned char 缓冲区中的公钥 如下所示 这是正确的获取方式吗 pStoredPublicKey X509 get pubkey x509 if pStoredPublicKey NULL
  • 32 位浮点数相加。

    关于浮点数 我学到的东西比我想知道的还要多 可以说我需要添加 1 10000000 00000000000000000000000 1 01111000 11111000000000000000000 2的补码形式 第一位是符号 接下来的