我无法准确理解IF语句的作用,我可以看到它正在检查变量x
是否等于int 0
。如果这是true
,则返回变量y
的ABSOLUTE值...这是当我丢失情节时,为什么return语句会继续包含<= ESPILON
?当然这意味着小于或等于epsilon的价值?如果是这样的话怎么样?如果这并不意味着它意味着什么?
(JAVA CODE)
final double EPSILON = 1E-14;
if (x == 0)
return Math.abs(y) <= EPSILON;
答案 0 :(得分:12)
浮点数学本质上是不准确的,所以不是测试等价(这总是一个坏主意),而是开发人员选择了一个小数字(在这种情况下为1x10 ^ -14)作为可接受的容差接近于零。 return语句返回一个比较,所以这将采取y的绝对值,当且仅当它足够接近零时才返回true,其中EPSILON定义了足够接近。
答案 1 :(得分:5)
如果y的绝对值是&lt; = EPSILON,则返回true,否则返回false。在return语句之前评估&lt; =。此代码是等效的:
if(x == 0)
{
boolean ret = Math.abs(y) <= EPSILON;
return ret;
}
代码不是简单地从左到右阅读。一个更简单的例子是
int x = 3 + 4 * 5;
评估后,x为23,而不是35.评估为3 +(4 * 5),而不是(3 + 4)* 5,因为*的优先级高于+。原始示例中的return语句具有非常低的优先级。所有运算符如+, - ,&lt;,&gt; =都会在它之前进行评估。
答案 2 :(得分:5)
整个表达
Math.abs(y) <= EPSILON
应首先评估,这意味着该函数将返回一个布尔值(true / false)。话虽如此,如果
x != 0
然后我不确定会得到什么。
答案 3 :(得分:1)
你是正确的,它正在检查变量x是否等于(好吧,也许是int)0。但是,如果这是真的那么它不返回y的绝对值,它返回一个布尔值, &lt; =运算符的结果。
答案 4 :(得分:1)
它返回一个布尔值。
Epsilon是双倍的,持有1E-14的价值。
这是实际的IF声明
if (x==0) {
return MATH.abs(y) <= EPSILON;
}
所以,如果y的绝对值小于或等于Epsilon,那么返回的是什么。
答案 5 :(得分:0)
我很长时间没有使用Java,但看起来这实际上是返回一个布尔值(可能是隐式转换)。
我想说如果x等于0,当y&lt; = Epsilon的绝对值时返回true,否则返回false。
但是如果x不等于0,那么它将返回null,因为没有语句覆盖else。
答案 6 :(得分:0)
答案 7 :(得分:0)
相当于这个
return (Math.abs(y) <= EPSILON);
为了清楚起见,应将添加到代码中。如前所述,它返回一个布尔值。
替代方案是
if (Math.abs(y) <= EPSILON)
return true;
else
return false;