我无法准确理解IF语句正在做什么,从我可以看到它检查变量x
是否等于int 0
.如果这是返回true
变量的ABSOLUTE值y
...这是当我丢失情节时,为什么return语句会继续包含<= ESPILON
?当然这意味着小于或等于epsilon的价值?如果是这样的话怎么样?如果它不意味着那么它是什么意思?
(JAVA代码)
final double EPSILON = 1E-14; if (x == 0) return Math.abs(y) <= EPSILON;
coppro.. 12
浮点数学本质上是不准确的,所以不是测试等价(这总是一个坏主意),而是开发人员选择了一个小数字(在这种情况下为1x10 ^ -14)作为接近零的可接受容差.return语句返回一个比较,所以这将采取y的绝对值,并且当且仅当它足够接近零时才返回true,其中EPSILON定义了足够接近.
浮点数学本质上是不准确的,所以不是测试等价(这总是一个坏主意),而是开发人员选择了一个小数字(在这种情况下为1x10 ^ -14)作为接近零的可接受容差.return语句返回一个比较,所以这将采取y的绝对值,并且当且仅当它足够接近零时才返回true,其中EPSILON定义了足够接近.
如果y的绝对值<= EPSILON,则返回true,否则返回false.在return语句之前计算<=.这段代码是等效的:
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语句具有非常低的优先级.所有运算符如+, - ,<,> =都会在它之前进行评估.
整个表达方式
Math.abs(y) <= EPSILON
应首先评估,这意味着该函数将返回一个布尔值(true/false).话虽如此,如果
x != 0
然后我不确定会得到什么.