检查 java.lang.Double 是否相等的高性能方法

2023-12-11

检查双精度值是否相等的最有效方法是什么。

我明白那个

double a = 0.00023d;
double b = 0.00029d;

boolean eq = (a == b);

is slow.

所以我正在使用

double epsilon = 0.00000001d;
eq = Math.abs(a - b) < epsilon;

问题是Infinitest抱怨测试花费了太多时间。这不是什么大不了的事(最多 1 秒),但它让我很好奇。

附加信息

a是硬编码的,因为它是预期值,b计算公式为

  // fyi: current = int, max = int
  public double getStatus()
  {
    double value = 0.0;
    if (current != 0 && max != 0)
      value = ((double) current) / max;
    return value;
  }

Update

java.lang.Double 就是这样做的

public boolean equals(Object obj) {
return (obj instanceof Double)
       && (doubleToLongBits(((Double)obj).value) ==
          doubleToLongBits(value));
}

所以人们可以认为这是最佳实践。


JUnit 有一个方法来检查Double对于给定增量的“相等”:

Assert.assertEquals(0.00023d, 0.00029d, 0.0001d);

See 这个API文档.

正如评论中所指出的,JUnit 实际上很可能比手动与给定增量进行比较慢。 JUnit 首先做了一个Double.compare(expected, actual)后跟(如果不相等)Math.abs(expected - actual) <= delta.

希望这个答案对于那些不知道 JUnit 实际上提供了一种不精确方法的人仍然有用Double平等测试。

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

检查 java.lang.Double 是否相等的高性能方法 的相关文章

  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • Spring3/Hibernate3/TestNG:有些测试给出 LazyInitializationException,有些则没有

    前言 我在单元测试中遇到了 LazyInitializationException 的问题 而且我很难理解它 正如你从我的问题中看到的那样Spring 中的数据库会话 https stackoverflow com questions 13
  • 是否有任何API可以将Microsoft Exchange服务器与Java应用程序集成以进行任务同步?

    我正在尝试将 Java Web 应用程序与 Microsoft Exchange 服务器集成以实现双向日历 即任务 同步 是否有用于此集成的 Java 开源 商业 API 谢谢 文卡特 看一眼j 交易所 http sourceforge n
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 在 IntelliJ 中运行 Spring Boot 会导致 Unable to load 'javax.el.E​​xpressionFactory'

    我正在尝试运行一个简单的 Spring Boot 应用程序 该应用程序具有以下 Maven pom file
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se
  • Java:使用 Graph API 在线更新 Sharepoint 上的 docx 文件

    我在使用 Java 在线更新 Sharepoint 上的 docx 文件时遇到问题 首先 我检查了构建 PUT 请求的 URL 此处 并使用此请求 PUT drives drive id items item id content 我首先使

随机推荐

  • 如何模拟已模拟对象的实例方法?

    我需要模拟以下内容 Class User def facebook returns an instance of a facebook gem end end 所以在我的用户测试中 要访问用户的 Facebook 信息 我需要调用user
  • 在参数中使用泛型集合

    假设您有 public interface A public class B implements A public class C void foo List a public class Test Declaration one Lis
  • 向电子邮件 MIME 添加 HTML 前缀会导致某些客户端显示空正文

    我正在尝试将 HTML 部分添加到电子邮件中 可以是任何类型的 MIME 可能是mixed or 选择 我们从 GMail 获取原始数据 目前我们的做法如下 email copy deepcopy original email if Con
  • tkinter 窗口中的grab_set

    我见过许多grab set 用于 tkinter 模态窗口的示例 但我无法让它适用于我的应用程序 我正在创建第二个窗口作为我的 设置 窗口 该窗口是从主应用程序的菜单中调用的 example import tkinter as tk cla
  • 根据给定的顺序对数据框进行排序[重复]

    这个问题在这里已经有答案了 可能是一个简单的问题 我有一个data frame 样本名称 因子水平以及因子水平的重复 df lt data frame name c DP A DP B PA A PA B PA C level c DP D
  • 如何在核心数据中存储图像

    我是 iOS 新手 我一直在尝试制作一个应用程序 将从相机捕获的图像存储到CoreData 我现在知道如何存储数据NSStrings NSDate和其他类型但难以存储图像 我读过很多文章说必须将其写入磁盘并写入文件 但我似乎无法理解 以下代
  • codeigniter 设置会话变量,但变量不起作用

    使用在 WAMP 上本地运行的 codeigniter 并处理会话 我尝试了默认会话处理程序 数据库会话 本机会话和现在的数据库会话 它们都会导致同样的问题 而我一生都无法弄清楚 问题是我正在尝试使用变量设置会话变量 我已经确认了该变量并已
  • 从 sqlite3 检索图像并在 Kivy 图像小部件中显示 - ValueError

    要求 我正在尝试从数据库检索图像并将该图像设置为 kivy 图像小部件 此操作会引发 ValueError 不确定原因 欢迎任何意见 数据库 Sqlite3 表名称 用户 列 用户 ID 用户名 用户图像 def populate fiel
  • 如何禁用 DIV 元素及其内部的所有内容[重复]

    这个问题在这里已经有答案了 我需要使用 Javascript 禁用 DIV 及其所有内容 我可以发誓做一个简单的 div 以前为我工作过 但由于某种原因它不再工作了 我不明白为什么 在 IE10 中 文本 Click Me 不会变灰 并且单
  • C++11 可变参数模板和逗号分隔表达式的等效性

    在可变参数模板中 运算符将参数包扩展为一系列逗号分隔的参数 以最简单的形式 我的问题是 为什么为多个逗号分隔的参数调用 some function 有效 而使用 运算符调用它却不起作用 我正在谈论这段代码 template
  • 为什么 Google Play 商店请求的权限不在我的清单中?

    我认为这可能与 ManifestMerger 有关 My AndroidManifest xml权限
  • 如何在所有驱动器的所有目录中搜索 .txt 文件?

    我使用此代码搜索所有驱动器中的所有目录以搜索所有 txt 文件 public List
  • 防止使用浏览器url直接访问图像

    我有一个名为 的文件夹Images 该文件夹包含用户个人资料图片 现在 用户只需将图像 URL 复制到浏览器即可随时查看自己的图像 这样他还可以看到其他用户的个人资料照片 我想要实现的是 用户应该只能通过我网站上的 PHP 页面看到他的个人
  • 使用 git (dokku) 部署时出错 - 超时/管道损坏

    我在 digital ocean 上使用 dokku 一段时间了 没有任何问题 我现在在利用以下命令部署到 dokku 时遇到问题 git remote add dokku dokku some ip myapp git push dokk
  • 迭代构造函数链

    假设我有这样的事情 function A function B B prototype Object create A prototype function C C prototype Object create B prototype v
  • 如何在移动浏览器上使用 PHP 强制下载文件?

    我想编写一个 php 脚本来在移动浏览器上下载一些文件 扩展名 apk dcm pdf zip 等 我已经编写了一个 php 代码来下载这些文件 它在所有浏览器 不是移动浏览器 上运行良好 但我使用 HTC 手机尝试过 它试图打开文件而不是
  • TextView 动态填充并截断最后一行文本

    我不确定它只是 最后一行 但我们有一个应用程序 它有一个带有 fill parent 宽度 wrap content 高度的 TextView 文本是从 Java 代码动态放入其中的 尽管布局中有足够的空间 文本的最后一行根本没有显示 它位
  • 您可以拥有与多个数据库关联的 DbContext 吗?

    我有一个用户数据库 其中包含所有用户信息以及应用程序权限等 如果我有一个如上所述的通用数据库 然后每个 Web 应用程序都有其他数据库 我可以链接数据库以使用 Fluent 建立两个数据库之间的关系API优先还是代码优先 没有那么优雅的方法
  • 是否可以仅通过客户端发送电子邮件? [复制]

    这个问题在这里已经有答案了 我需要在使用 Vue js 的前端应用程序中发送电子邮件 我想知道是否可以仅使用 Javascript 发送邮件 或者我是否需要服务器端语言 谢谢你 不 您不能直接使用 JavaScript 发送电子邮件 但是您
  • 检查 java.lang.Double 是否相等的高性能方法

    检查双精度值是否相等的最有效方法是什么 我明白那个 double a 0 00023d double b 0 00029d boolean eq a b is slow 所以我正在使用 double epsilon 0 00000001d