[英]Is short-circuit evaluation possible in multiplication?
假设我在Java中有以下代码:
public static double function(double x, double y, int k) {
return Math.pow(x, 2) + Math.pow(y, 2) + y + k*Math.sqrt(Math.pow(y, x));
}
它在某个点(x,y)
计算一些函数。 注意 ,平方根乘以整数k
。 在某些情况下,我会给k = 0
(因为我不需要求平方根)。 它提供了我需要的值, 但问题是我正在编写时间敏感的程序,即我将多次调用方法function
。 所以,我希望我的程序如果k = 0
不会评估Math.sqrt(Math.pow(y, x))
。 我在谷歌上搜索了一下,但是似乎没有算术上的“短路”等价物(嗯,在许多情况下甚至没有意义,乘法可能是排除在外的)运算,就像逻辑运算一样。
我怎样才能达到预期的效果?
我认为在末尾添加三元运算符将避免调用Math.sqrt(Math.pow(y, x))
计算。 如下所示
public static double function(double x, double y, int k) {
return Math.pow(x, 2) + Math.pow(y, 2) + y
+ ( k!=0 ? k*Math.pow(y, x/2) : 0); //ternary operator here
}
您可以通过执行以下操作来实现此结果
k == 0 ? 0 : k*Math.sqrt(Math.pow(y, x))
这不等于
k*Math.sqrt(Math.pow(y, x))
尽管作为较短的版本,即使k == 0
也会产生NaN
。
没有短路乘法运算符,因为数学只是不能这样工作。 你能做的就是
result = Math.pow(x, 2) + Math.pow(y, 2) + y;
if (k != 0)
result += k*Math.sqrt(Math.pow(y, x));
return result;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.