首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何比较Java中doubles序列是否都“大致相等”?

如何比较Java中doubles序列是否都“大致相等”?
EN

Stack Overflow用户
提问于 2012-02-01 11:49:39
回答 5查看 34.1K关注 0票数 22

我在java中有一个返回双精度数的方法,我想要比较每次调用该方法(比如5次)时返回的每个双精度数,这样我就可以得出结论,每次返回的数字几乎是相同的。

我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-01 11:57:12

你必须首先决定“几乎相同”是什么意思。例如,在java.lang.Math中有一个名为ulp()的方法,该方法在给定一个双精度值的情况下,返回该双精度值与下一个双精度值之间的距离;即,该数字与其他数字之间可能存在的最小差异。您可以简单地比较两个doubles之间的差异和调用该方法的结果。

另一方面,也许你希望两个数字彼此之间只有1%的误差。在这种情况下,执行相同的计算,但使用第一个数字乘以0.01而不是ulp()作为最大可接受距离。

票数 11
EN

Stack Overflow用户

发布于 2012-02-01 11:59:59

代码语言:javascript
复制
public static boolean almostEqual(double a, double b, double eps){
    return Math.abs(a-b)<eps;
}

其中,eps是平等的度量。

票数 36
EN

Stack Overflow用户

发布于 2012-02-01 11:58:44

近似相等是用绝对差异来定义的:如果绝对差异不超过某个特定的、假设为小的数字,那么您可以说您正在比较的值“足够接近”。

代码语言:javascript
复制
double diff = Math.abs(actual - expected);
if (diff < 1E-7) {
    // Numbers are close enough
}

您必须非常小心,不要混淆“足够接近”和“等于”,因为这两者是根本不同的:相等是可传递的(例如,a==b和b==c一起表示a==c),而“足够接近”不是可传递的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9090500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档