对浮点数求反总是安全的吗

2024-04-28

考虑:

double f = foo();
double g = -f;

where foo()可以返回分配给的任何内容f.

is double g = -f;在 C 和 C++ 中安全吗?对于 IEEE 754 类型,显然是这样,但 C 和 C++ 并不限制浮点实现(与 Java 不同)。

如果安全的话会-g总是比较true with foo()?

(以上不适用于int2 的补码)。


浮动类型由 C 标准(至少 N1570 草案)的 §5.2.4.2.2 定义:

浮点类型的特征是根据模型来定义的,该模型描述浮点数和值的表示形式,提供有关实现的浮点算术的信息。21)以下参数用于定义每个浮点的模型类型:

  • s符号(±1)
  • b指数表示的基数或基数(> 1 的整数)
  • e指数(最小 emin 和最大 emax 之间的整数)
  • p精度(有效数中以 b 为基数的位数)
  • fk小于 b(有效数字)的非负整数

浮点数 (x) 由以下模型定义:

所以是的,这个表达式是somewhat safe,除了以下情况foo返回标准未指定的“其他类型的浮点数”之一:

除了标准化浮点数(如果 x ≠ 0,则 f1 > 0)之外,浮点类型还可以包含其他类型的浮点数,例如次正规浮点数(x ≠ 0,e = emin ,f1 = 0)和非标准化浮点数(x ≠ 0,e > emin,f1 = 0),以及非浮点数的值,例如无穷大和 NaN。

and:

实现可以给零和非浮点数的值(例如无穷大和 NaN)带符号,也可以不带符号。

可能还有其他警告,但该标准详细介绍了这些类型的特征。您可以阅读有关它们的所有内容这个公开的草案 http://www.compsci.hunter.cuny.edu/~sweiss/resources/c11standard.pdf.

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

对浮点数求反总是安全的吗 的相关文章

随机推荐

  • PHP:删除任何扩展名的文件?

    当用户上传照片时 它会检查他们是否已经拥有一张照片 如果他们这样做 我希望它删除旧的 可以有任何扩展名 然后放入新的 有没有办法在不从数据库获取旧扩展的情况下做到这一点 目前的代码 del members gt prepare insert
  • 无法访问我的控制器/构造函数的输入

    我有一个简单的 Angular 2 组件 Input 我将其绑定到模板 模板显示输入数据 但我无法从构造函数访问它 import Component View bootstrap Input from angular2 angular2 i
  • 如何配置 IIS 以在 HTML5 模式下 URL 重写 AngularJS 应用程序?

    我有AngularJS 种子项目 https github com angular angular seed我已经添加了 locationProvider html5Mode true hashPrefix 到 app js 文件 我想配置
  • MSBuild 项目部署到本地文件夹并转换配置

    我在尝试找到正确的方法来使用 MSBuild 构建 Web 项目并输出仅包含可部署文件 即没有 cs csproj Debug config 等 但发布到本地文件夹的项目时遇到问题然后我可以通过 FTP RoboCopy 或其他方式 传输到
  • Haskell 错误:“非详尽模式”

    所以我有这个功能 当我尝试像这样使用它时 合并排序列表 1 1 1 1 它给了我一个错误 1 1 例外 SortFunctions hs 86 1 91 89 非详尽 函数 mergeSortedLists 中的模式 85 mergeSor
  • 如何向正在运行的 Linux 进程发送 Ctrl-Break?

    我正在调试在 Sun 的 JDK 1 4 2 18 上运行的应用程序中的内存泄漏 该版本似乎支持命令行参数 XX HeapDumpOnCtrlBreak 这可能会导致 JVM 在遇到控制中断时转储堆 如何将其发送到 Linux 机器上的后台
  • EnumChildWindows 还是 FindWindowEx?

    我可以选择使用 API EnumChildWindows 或 FindWindowEx 中的任何一个 有什么建议哪个 api 更注重性能 FindWindowEx 内部是否使用 EnumChildWindows 来获取特定窗口的句柄 这实际
  • 联合元素对齐

    如果我有一个联合 C 标准保证联合本身将与最大元素的大小对齐 union U long l int i short s char c 2 u 但对于工会内部各个工会成员的协调 它是怎么说的呢 下面的表达式能保证为真吗 u l u i u i
  • C++ STL 下一个排列与组合

    我知道我可以使用std next permutation在包含元素的某些容器上 1 2 3 这将生成该序列的 6 种排列 我想做的是给定一些设置 1 2 3 4 5 6 生成大小为 3 的所有可能的排列 因此对于这个例子 4 3 2 将是由
  • 如何在主活动中注册接收者? [复制]

    这个问题在这里已经有答案了 我有一个SmsReceiver我想在主活动中注册的类 我到底应该做什么 我是安卓新手 你可以做两件事 创建和定义BroadcastReceiver in the Manifest 创建并注册BroadcastRe
  • 获取 $_SERVER['AUTH_USER'] 的空白值

    我有一个在 Windows 2008 Server R2 上运行的 PHP 应用程序 它使用 PHP 的 LDAP 库根据 Active Directory 对用户进行身份验证 As per 这个答案 https stackoverflow
  • OCaml:如何运行包含库的脚本

    我正在按照 Real World OCaml 一书来学习 OCaml 许多程序都需要使用 Jane Street Core 库 当我在顶层使用这个核心库中的函数时 它工作得很好 在那里 我只需使用以下命令来打开 Core 库 use top
  • YouTube iframe 不响应 postMessage 命令

    我正在尝试使用来自父级的 postMessage 命令来控制 YouTube iframe 但它似乎不起作用 由于多种原因 我没有使用 YouTube API 只是使用带有 YouTube 嵌入视频的普通 iframe 我尝试发送命令的方式
  • monodevelop 2.1+ 支持 Visual Studio 2010 项目文件吗?

    monodevelop 2 1 是否支持 Visual Studio 2010 项目文件 但是 如果不支持 有人知道计划何时提供支持吗 我问的原因是我有一个在 VS2008 和 Monodevelop 中都使用的解决方案 当我在 2010
  • 为什么 reposync 没有签出我在清单文件中指定的分支?

    假设我有以下清单文件repo https source android com setup develop repo tool MCVE https stackoverflow com help minimal reproducible e
  • 如何通过父进程杀死子进程?

    我使用创建一个子进程fork 如果子进程无法在30秒内完成执行 父进程如何杀死子进程 我想让子进程最多执行 30 秒 如果超过30秒 父进程就会杀死它 你有想法这样做吗 向其发送 SIGTERM 或 SIGKILL http en wiki
  • Dropzone.js 和每个文件的完整路径

    我正在尝试使用 Dropzone js 重新创建删除的文件 文件夹的文件夹结构 有没有办法访问每个文件的完整路径 以便可以在 php 端重新创建目录结构 这是一种简单的方法 您可以额外发送某些文件夹中所有文件的完整路径 dropzone o
  • Xgboost:bst.best_score、bst.best_iteration 和 bst.best_ntree_limit 有什么区别?

    当我使用 xgboost 训练我的数据时2 cates classification problem 我想使用提前停止来获得最佳模型 但我对在预测中使用哪一个模型感到困惑 因为提前停止将返回 3 个不同的选择 例如 我应该使用 preds
  • 读写文本文件的最佳方法

    我正在使用最新版本的 Lazarus IDE 并且我有一个Memo1在我的 TForm1 上 我必须加载一个文本文件Memo1然后编辑备忘录的每一行 我使用Memo1 Lines Strings i 最后 我必须将编辑后的备忘录保存在特定路
  • 对浮点数求反总是安全的吗

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