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

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(使用前将#替换为@)

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

随机推荐

  • 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