繁体   English   中英

乘法是否可以进行短路评估?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM