epsilon java_java - Java双重比较epsilon - 堆栈内存溢出

我写了一个类来测试相等,小于和大于Java中的两个双重。 我的一般情况是比较可以具有半分精度的价格。 59.005比59.395。 我选择的epsilon适合这些情况吗?

private final static double EPSILON = 0.00001;

/**

* Returns true if two doubles are considered equal. Tests if the absolute

* difference between two doubles has a difference less then .00001. This

* should be fine when comparing prices, because prices have a precision of

* .001.

*

* @param a double to compare.

* @param b double to compare.

* @return true true if two doubles are considered equal.

*/

public static boolean equals(double a, double b){

return a == b ? true : Math.abs(a - b) < EPSILON;

}

/**

* Returns true if two doubles are considered equal. Tests if the absolute

* difference between the two doubles has a difference less then a given

* double (epsilon). Determining the given epsilon is highly dependant on the

* precision of the doubles that are being compared.

*

* @param a double to compare.

* @param b double to compare

* @param epsilon double which is compared to the absolute difference of two

* doubles to determine if they are equal.

* @return true if a is considered equal to b.

*/

public static boolean equals(double a, double b, double epsilon){

return a == b ? true : Math.abs(a - b) < epsilon;

}

/**

* Returns true if the first double is considered greater than the second

* double. Test if the difference of first minus second is greater then

* .00001. This should be fine when comparing prices, because prices have a

* precision of .001.

*

* @param a first double

* @param b second double

* @return true if the first double is considered greater than the second

* double

*/

public static boolean greaterThan(double a, double b){

return greaterThan(a, b, EPSILON);

}

/**

* Returns true if the first double is considered greater than the second

* double. Test if the difference of first minus second is greater then

* a given double (epsilon). Determining the given epsilon is highly

* dependant on the precision of the doubles that are being compared.

*

* @param a first double

* @param b second double

* @return true if the first double is considered greater than the second

* double

*/

public static boolean greaterThan(double a, double b, double epsilon){

return a - b > epsilon;

}

/**

* Returns true if the first double is considered less than the second

* double. Test if the difference of second minus first is greater then

* .00001. This should be fine when comparing prices, because prices have a

* precision of .001.

*

* @param a first double

* @param b second double

* @return true if the first double is considered less than the second

* double

*/

public static boolean lessThan(double a, double b){

return lessThan(a, b, EPSILON);

}

/**

* Returns true if the first double is considered less than the second

* double. Test if the difference of second minus first is greater then

* a given double (epsilon). Determining the given epsilon is highly

* dependant on the precision of the doubles that are being compared.

*

* @param a first double

* @param b second double

* @return true if the first double is considered less than the second

* double

*/

public static boolean lessThan(double a, double b, double epsilon){

return b - a > epsilon;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值