有效检查两个浮点值是否具有不同的符号

2024-03-06

我需要查找是否有两个有限浮点值A and B有不同的符号或其中之一为零。

在许多代码示例中,我看到测试如下:

if ( (A <= 0 && B >= 0) || (A >= 0 && B <= 0) )

它工作正常,但对我来说看起来效率低下,因为这里验证了许多条件,并且每个条件分支对于现代 CPU 来说都是一个缓慢的操作。

另一种选择是使用浮点值的乘法:

if ( A * B <= 0 )

即使在溢出的情况下它也应该起作用,因为无穷大的值保留了正确的符号。

执行检查的最有效方法是什么(这两种之一或可能其他一些)?


有效检查两个浮点值是否具有不同的符号

if ( A * B <= 0 )无法区分符号时A or B是集合中的-0.0, +0.0.

考虑signbit() https://en.cppreference.com/w/cpp/numeric/math/signbit

if (signbit(A) == signbit(B)) {
  ; // same sign
} else  {
  ; // distinct signs
}

相信编译器能够形成高效的代码 - 或者使用更好的编译器。


然后OP形成了一个不同的目标:“两个有限浮点值A和B具有不同的符号,或者其中一个为零。”

当然if (signbit(A) != signbit(B) || A == 0.0 || B == 0.0)遇见这个新的功能性没有舍入到 0.0 的问题@埃里克·波斯特皮斯基尔 https://stackoverflow.com/questions/68761048/efficient-check-that-two-floating-point-values-have-distinct-signs/68761596#comment121521786_68761048 of if ( A * B <= 0 ),但可能无法满足模糊要求最有效的方法.

形成高效代码并避免的最佳方式过早的优化确实是万恶之源 https://softwareengineering.stackexchange.com/questions/80084/is-premature-optimization-really-the-root-of-all-evil就是要看到更大的背景。

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

有效检查两个浮点值是否具有不同的符号 的相关文章

随机推荐

  • 使用最新的 Xcode 在 iOS 3.1.3 中进行测试

    如何使用最新的 Xcode 版本在 iOS 3 1 3 中测试应用程序 可以在模拟器中执行此操作吗 如果没有 是否可以将设备降级到 iOS 3 1 3 是的 您可以降级设备 它没有得到官方支持 但我已经在两台 3G 上完成了它 并在 3 1
  • 将字符串添加到 ImageView 对象 Android

    我需要将一个字符串附加到 ImageView 对象中 以便我可以执行类似的操作imgView1 getString 它会返回它 我知道有getTags and setTags但根据我的理解 它只使用整数 谢谢 只需补充 dharms 答案
  • 没有使用 Spring Security 进行身份验证和授权

    我的项目要求我使用 Spring Security 进行 CSRF 和 XSS 保护 但不使用它进行身份验证和授权 我已将 SS 配置到我的应用程序中 但每次访问页面时 它都会自动将我重定向到其登录页面 我如何禁用此功能 我的Securit
  • 指定 cartopy 中的纬度/经度标签位置(删除某些边)

    Cartopy 0 18 0 中为任何地图投影添加纬度 经度标签的新功能非常出色 这是这个包的一个很好的补充 对于某些地图 特别是在极地地区 纬度 经度标签可能非常拥挤 这是一个例子 from matplotlib import pyplo
  • 扩展网址如何工作

    我知道这些类型的 URL 如何加载页面 基于它们的 GET 参数 在后端大致是这样的 但这些类型的 URL 是如何工作的呢 我的意思是 数据是如何动态加载的 www dummysite com parm subpage1 xyz www d
  • 处理连续的 JSON 流

    现已不复存在 页面http stream twitter com 1 statuses sample json http stream twitter com 1 statuses sample json用于返回连续且无限的 JSON 数据
  • 第一次执行代码时颜色不正确

    我有一段代码可以在一页上绘制多个堆叠条形图 我指定了一个调色板 以便每个数据组都与每个图表中的相同颜色相关联 我发现第一个图表中的颜色不正确 但在所有后续图表中都是正确的 如果我在同一个 R 会话中重新运行代码 所有图表都具有正确的颜色 但
  • 如何在 Mac 上设置 2.7 的 python 路径?

    我知道 这个问题已经被问过很多次了 也被回答过很多次了 但是 我仍然无法摆脱这个 我在我的 mac 上发现了以下信息 cd Library Frameworks Python framework Versions Current gt 2
  • 如何管理pouchdb和couchdb同步?

    存储多个用户数据的最佳方法是每个用户每个数据库 我正在使用同样的方法 我在服务器上有 couchdb 在移动应用程序上有 pouchdb 我通过在 pouchdb 和 couchdb 中为用户创建单独的数据库来维护每个用户数据 这意味着我在
  • 将 ssh 密钥与 scp 和 ssh 结合使用

    我正在尝试使用 scp 将一些文件复制到目标系统 然后登录到系统并安装这些文件 我在这里使用 scp 和 ssh 命令以及 ssh 密钥进行无密码身份验证 ssh 密钥是在源系统上创建的 如下所示 这是创建 ssh 密钥的正确且安全的方法吗
  • 为什么我不能在java中的Frame上画任何东西?

    编码就在这里 我无法在框架内创建任何矩形或圆形 该项目的目标是创建转换 celcius 2 华氏度和华氏度 2 摄氏度 所以我想要的是 请教我如何在框架旁边绘制矩形或椭圆形 import java awt BorderLayout impo
  • JESS 引擎的网页不可用

    http www jessrules com http www jessrules com and https herzberg ca sandia gov https herzberg ca sandia gov 不要再工作了 我如何获得
  • graphql-codegen 未使用配置文件运行

    In my package json文件我有运行的脚本条目graphql codegen但它抱怨说 config参数无效 gt yarn gen yarn run v1 21 1 graphql codegen config codegen
  • 气流动态 dag 创建

    有人请告诉我气流中的 DAG 是否只是一个图表 如占位符 没有任何与其关联的实际数据 如参数 或者 DAG 是否像一个实例 对于固定参数 我想要一个系统 其中要执行的操作集 给定一组参数 是固定的 但每次运行这组操作时 该输入都会不同 简单
  • Angular 2注入在继承中不起作用

    最近我们从 Angular 2 0 升级到 2 4 从那时起我们就遇到了继承问题 如果我们调用子进程 所有依赖项都会变得未定义 孩子没有构造函数 这意味着它使用父亲的构造函数 这是代码 Injectable export class Chi
  • 使用 ajax 下拉菜单中的 onclick 事件更新隐藏的输入值

    我正在使用 MachForm 并添加了这个隐藏字段
  • Spring Boot - 在 application.properties 中获取 Spring-Kafka 客户端 ID 的主机名

    我正在使用 Spring Kafka 和 Boot 开发一个项目 并且希望在 application properties 中获取属性 spring kafka consumer client Id 的主机名 以便可以在服务器端日志中区分我
  • 修改C中的char*字符串

    我有这个 char original html content 并想插入一个新的 char mycontent newhtmlinsert 进入之前的 原文 标签在 原始 中 我的新原版现在是 char neworiginal html c
  • 在 Visual Studio 中调试时访问异常中断过滤器的更好方法?

    我厌倦了在 Visual Studio 中使用令人眼花缭乱 耗时的 异常 对话框来打开和关闭异常中断过滤器 我寻找 Visual Studio 命令来帮助从命令窗口自动执行此操作 但没有成功 有没有人有一种技术可以避免 调试 gt 异常 对
  • 有效检查两个浮点值是否具有不同的符号

    我需要查找是否有两个有限浮点值A and B有不同的符号或其中之一为零 在许多代码示例中 我看到测试如下 if A lt 0 B gt 0 A gt 0 B lt 0 它工作正常 但对我来说看起来效率低下 因为这里验证了许多条件 并且每个条