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 位浮点数相加。 的相关文章

  • PostgreSQL round(v numeric, s int)

    Which method http en wikipedia org wiki Rounding Tie breakingPostgres 吗round v numeric s int http www postgresql org doc
  • 使用浮点/双除法比较可约分数

    假设我有两个分数 a b 和 c d 其中 a b c d 都是大于 0 的整数 使用以下函数检查它们的相等性是否安全 bool are equal fractions int a int b int c int d return stat
  • Javascript 浮点乘以 100 仍然有错误

    我有一个货币字段的文本输入 我在字段中输入 33 91 并在尝试使用 乘以 100 技术时得到以下结果 var curWth parseInt trans withdraw index val 100 3390 var curWth par
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • 在 Swift 中将半精度浮点数(字节)转换为浮点数

    我希望能够从二进制文件中读取半浮点数并将它们转换为 Swift 中的浮点数 我查看了来自其他语言 例如 Java 和 C 的几种转换 但是我无法获得与半浮点相对应的正确值 如果有人可以帮助我实施 我将不胜感激 从 Float 到 Half
  • MySQL 存储浮点数

    我正在尝试保存这么长的浮点数 13 00386644742523 它基本上是 Lat 和 Lng 值 当我将它保存在数据库中时 它被存储为 13 0039 您应该明确使用精度并且类型应该是DECIMAL NOT FLOAT因为小数点后的每一
  • 如何在Python中找到低精度浮点值的原始文本表示?

    我遇到了显示问题floatPython 中的值 从外部数据源加载 它们是 32 位浮点数 但这也适用于较低精度的浮点数 以防万一 这些值是由人类在 C C 中输入的 因此与任意计算值不同 与round数字很 可能not预期的 但不能被忽略
  • 64 位 Windows 汇编器

    我想对 64 位 Windows 程序集进行编程 最好使用 NASM 我在 google 上查了一下 但似乎找不到 64 位 Windows 编译器 有些网站提到了ml64 但它似乎不再包含在VC 中 我尝试过 32 位程序集 但显然它在我
  • 将浮点型转换为双精度型

    我正在尝试转换Single to Double同时保持原来的价值 我找到了以下方法 Single f 5 2F Double d1 f 5 19999980926514 Double d2 Double Parse f ToString 5
  • GLSL 中统一浮点行为和常量浮点行为的不同

    我正在尝试在 GLSL 中实现模拟双精度 并且观察到一种奇怪的行为差异 导致 GLSL 中出现细微的浮点错误 考虑以下片段着色器 写入 4 浮点纹理以打印输出 layout location 0 out vec4 Output unifor
  • java - IBM-IEEE 双精度浮点字节转换

    我需要在 Java 中对字节数组进行 IBM IEEE 浮点转换 我能够使用成功地进行单精度浮点字节的转换http www thecodingforums com threads c code for converting ibm 370
  • 使用.NET 访问Windows 注册表?

    我发现一个奇怪的行为 NET http en wikipedia org wiki NET Framework模块访问Windows注册表 http en wikipedia org wiki Windows Registry使用Regis
  • 在 R 中,如何让 PRNG 在平台之间给出相同的浮点数?

    在 R 4 1 1 中运行以下代码会在平台之间产生不同的结果 set seed 1 x lt rnorm 3 3 print x 22 0 83562861241004716 intel windows 0 8356286124100471
  • PHP 中的舍入

    a 0 1 0 7 10 int 0 1 0 7 10 PHP 返回 false 有人能给我解释一下 为什么会发生这种情况吗 第一个返回 8 第二个返回 7 引用PHP 浮点精度手册中的大红色警告 http de3 php net manu
  • 空序列的算术平均值是多少?

    免责声明 不 我没有找到任何明显的答案 这与我的预期相反 在寻找代码示例时 算术平均值 我可以通过谷歌找到的前几个例子似乎是这样定义的 空序列生成的平均值为0 0 eg here https rosettacode org wiki Ave
  • 如果是整数,则使用 sprintf 格式化没有小数位的浮点数

    最初 我使用 sprintf 和始终保留 2 位小数的浮点数 使用以下代码 static void MyFunc char buffer const float percentage sprintf buffer 2f percentage
  • OpenMP 与浮点范围并行

    我有以下程序 int main double sum 0 pragma omp parallel for reduction sum for double x 0 x lt 10 x 0 1 sum x x 当我编译它时 我收到错误inva
  • Python 3 中 int() 和 Floor() 有什么区别?

    在Python 2中 floor 返回一个浮点值 虽然对我来说并不明显 但我发现了一些解释来澄清为什么它可能有用floor 返回浮点数 对于类似的情况float inf and float nan 然而 在Python 3中 floor 返
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后

随机推荐

  • 函数参数 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的补码形式 第一位是符号 接下来的