测试先前声明的变量和是否不等于3.14的java布尔表达式
我正在努力复习以前的试卷,试图积累Java方面的经验。 这个问题有两个答案。第一个是我自己的,看起来很直截了当,第二个是我的讲师的,在我的Java开发的这个特定阶段,这让我感到困惑
这是我的密码:
public class InClassTestTwoQ2
{
public static void main(String[] args){
double sum = 3.14;
System.out.println(test(sum));
System.out.println(testTwo(sum));
}
public static boolean test(double sum){
return sum != 3.14; //My boolean test return type
}
public static boolean testTwo(double sum){
return Math.abs(sum - 3.14) > 1e-14; //Lecturer boolean test return type
}
}
他在用数学。这里有更好的选择吗?此外,我不确定1e-14在做什么? 有人能解释一下为什么我的讲师用这种方式返回他的布尔语句吗?我的似乎是直截了当的,因为我永远不会按照他的方式去做
另外,请原谅我代码中的任何错误。我还在学Java。 非常感谢
# 1 楼答案
3.1444440和3.1444441
他们平等吗?在Java中,如果你简单地通过。因此,如果
==
来比较它们,那么你会得到false
。这就是为什么永远不要将double/floating类型与==
进行比较。比较浮动类型的最佳方法是使用tolerance value
。您希望测试减去两个浮动类型的结果是否在该公差值范围内。例如,老师使用的公差值为^{sum-3.14
在公差值范围内,则认为这两个数字相等还要注意的是
Math.abs
给出了减法的absolute
值,因此永远不会得到负数,否则将无法得到正确的结果希望这能给你一个概述
# 2 楼答案
您的指导老师发布的内容涉及使用浮点ε——在您的案例中是^{(请参阅此链接):
http://en.wikipedia.org/wiki/Machine_epsilon
至于你为什么要使用这个,以及为什么它更好,请参考以下链接:
http://www.ibm.com/developerworks/java/library/j-jtp0114/
其中规定:
需要注意的一点是,所有平台和语言都必须在一定程度上处理浮点比较。虽然这个对话与您的语言(它是C++语言)无关,但讨论中提出的一些观点也适用于Java
What is the most effective way for float and double comparison?