精确为零的浮点/双精度相等

2023-11-26

我有一个使用的算法floats or doubles执行一些计算。

Example:

double a;
double b;
double c;
...
double result = c / (b - a);
if ((result > 0) && (result < small_number))
{
    // result is relevant...
} else {
    // result not required...
}

现在,我担心的是(b - a)可能为零。如果它接近零但不为零,则没关系,因为result将超出有用的范围,并且我已经检测到这一点(如(b - a)趋近于零,result将接近 +/- inf,这不在范围内0-small_number...)

但如果结果是(b - a)正好为零,我预计由于除以零,会发生一些依赖于平台的事情。我可以改变if声明至:

if ((!((b-a) == 0.0)) && ((result = c/(b-a)) > 0) && (result < small_number)) {

但我不知道是否(b-a) == 0.0将始终检测到与零相等。我已经看到浮点数中有多种精确零的表示形式?如何在不进行一些 epsilon 检查的情况下对它们进行测试,而我不需要这些 epsilon 检查(在我的算法中将忽略一个小的 epsilon)?

独立于平台的检查方式是什么?

EDIT:

不确定人们是否足够清楚。基本上我想知道如何查找类似以下的表达式:

double result = numerator / denominator;

将导致浮点异常、CPU 异常、来自操作系统的信号或其他......而不实际执行操作并查看它是否会“抛出”......因为检测到这种性质的“抛出”似乎很复杂并且特定于平台。

Is ( (denominator==0.0) || (denominator==-0.0) ) ? "Will 'throw'" : "Won't 'throw'"; enough?


这取决于如何b and a得到了他们的价值观。零在浮点格式中有精确的表示,但更大的问题是几乎但不完全为零的值。检查总是安全的:

if (abs(b-a) > 0.00000001  && ...

其中 0.00000001 是任何有意义的值。

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

精确为零的浮点/双精度相等 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • PHP 会话的最大大小

    PHP 会话中可以存储的最大大小是多少 您可以在会话中存储任意数量的数据 所有会话都存储在服务器上 您可以达到的唯一限制是脚本一次可以消耗的最大内存 默认情况下为 128MB 类似回答 理想的 PHP 会话大小 一些有用的评论
  • 如何在 jquery onkeyup 上触发 TextBox.TextChanged 事件?

    我有带有 ontextchanged 事件的 asp net TextBox 这是我的应用程序中的搜索文本框 我在这个活动中有搜索代码 我怎样才能在 jquery keyup 的帮助下触发这个事件 如果我在文本框中输入文本 它将在文本更改时
  • 使用 jQuery 创建表 - 追加

    我的页面 div div div 在 jquery 中 for i 0 i lt 3 i here table append result i 这为我生成 div result1 result2 result3 etc div 我想在表中收
  • 使用 ISO 8601:2004 表示秒的小数部分

    以下是IS0 8601 2004标准的定义 它说秒的小数部分可以用一到六位数字表示 我可以使用全部 6 位数字来表示秒的小数部分吗 如果我使用 6 位数字来表示秒的一小部分 以下表示法是否正确 1毫秒 00100010ms 01000010
  • TensorArray 和 while_loop 在张量流中如何协同工作?

    我正在尝试为 TensorArray 和 while loop 的组合生成一个非常简单的示例 1000 sequence in the length of 100 matrix tf placeholder tf int32 shape 1
  • sqlQuery:无法将 ID 号作为字符获取到 R 中?

    我正在使用RODBC包内的 ORACLE 数据库 DB 一切都做得很好 但我需要从这个数据库获取一个表和一些字符类型的变量 而不是数字 所以 我的查询是这样的 e ManzResul VIII lt sqlQuery con select
  • 将函数分配给变量

    假设我有一个函数 def x print 20 现在我想将该函数分配给一个名为的变量y 这样如果我使用y它调用该函数x再次 如果我只是做作业y x 它返回None 您根本不调用该函数 gt gt gt def x gt gt gt prin
  • 当使用带有“overflow:hidden”的容器时,scroll-margin-top属性不起作用[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的 css 属性有问题scroll margin top 滚动到页面上的元素时添加偏移量 它并不适用于所有情况 特别是这种情况 当元素具有scroll margin top在一个容器
  • 在 Tensorflow 中保存和恢复经过训练的 LSTM

    我使用 BasicLSTMCell 训练了 LSTM 分类器 如何保存我的模型并恢复它以便在以后的分类中使用 我们发现了同样的问题 我们不确定内部变量是否已保存 我们发现您必须在创建 定义 BasicLSTMCell 之后创建保护程序 否则
  • 网络上的 Java 文件锁定

    这可能与之前的帖子类似 但我想具体说明在网络上而不是本地上使用锁定 我想将文件写入共享位置 因此它很可能位于网络上 当然是 Windows 网络 也可能是 Mac 我想防止其他人在写入该文件时读取该文件的任何部分 这不会是一个高度并发的进程
  • R 函数 Sink 不会将消息或警告重定向到文件

    我希望将 stderr 和 stdout 消息重定向到输出文件 这是我尝试过的 sink outputFile type c output message print using print cat using cat n message
  • laravel 按日期对数组进行排序

    你好朋友我有一个数组 如下所示 array 3 0 gt array 6 date gt 2016 05 31 15 08 33 0 gt 31 May 16 1 gt aze 2 gt 2 3 gt hi 4 gt 48784146470
  • 使用一条命令将多个包推送到私有 nuget (VSTS)

    我正在尝试一次将多个 nuget 包推送到私有 VSTS nuget 服务器 我搜索了 doco 但找不到批量 Push 命令 我正在使用下面的命令 该命令似乎会覆盖 VSTS 上现有的 nuget 包 nuget push mynuget
  • 当下拉关闭时,垫选择单击外部不起作用

    我已经使用 Mat select 角度组件制作了下拉菜单 当我单击下拉菜单外部 页面主体 时 我需要触发一个事件
  • 如何从长纪元时间(以毫秒为单位)创建 Java 8 LocalDate?

    我有一个外部 API 它返回的日期为longs 表示为自纪元开始以来的毫秒数 使用旧式 Java API 我只需构造一个Date从它与 Date myDate new Date startDateLong Java 8 中的等价物是什么Lo
  • 延迟表达式求值而不使用“quote”

    我创建了以下函数 示例作为在表等中显示变量标签的通用方法 Function to prettify the output of another function using a var labels attribute This is pa
  • 在verilog中使用for循环生成

    我试图理解为什么我们在verilog 中使用generate 和for 循环 一起使用生成和 for 循环 reg 3 0 temp genvar i generate for i 0 i lt 3 i i 1 begin always p
  • jQuery .attr 检索自定义属性返回未定义

    我在使用 jquery 时遇到以下问题 我有这样的东西 div value span class delete span div 现在我有了这个 fn 但它只返回 未定义 但是如果我要求的话 它确实会返回 id 或类 delete clic
  • 以编程方式生成 BPEL 文件?

    有没有一种方法可以在 Java 中以编程方式生成 BPEL 我尝试使用 BPEL Eclipse Designer API 编写以下代码 Process process null try Resource Factory Registry
  • 精确为零的浮点/双精度相等

    我有一个使用的算法floats or doubles执行一些计算 Example double a double b double c double result c b a if result gt 0 result lt small n