3

我想知道,因为当我在检查模式下运行我的代码时,似乎存在一些差异。例如:

List<List> getFactors(int n) 
{
    List<List> factors = [[1, n]];
    double top = pow(n,1/2);
    int test = 2;
    while (test <= top) 
    {
        if (n % test == 0)
            factors.add([test, n ~/ test]);
        test++;
    }
    return factors;
}

按原样工作,但是当我将其更改为时pow(n,1/2)n.pow(1/2)它会在检查模式下返回错误。唯一的解决方法是将类型更改为n双精度。为什么是这样?也很高兴知道两者之间的一般差异。谢谢!

4

1 回答 1

5

更新: int/num/double.pow() 目前只存在于虚拟机中,将被移除。请改用math.pow()


int.pow() 的签名是:

int pow(int exponent)

因此,以下示例在检查模式下失败,因为 1/2 不计算为整数。

int i = 5;
i.pow(1/2);

所以调用 int.pow() 需要一个整数指数(仅在检查模式下检查),并返回一个整数。

And, calling math.pow(num x, num exponent), does not require an integer exponent, and may return a double, if x is an integer and exponent is a double.

Here is a link to the math.pow() documentation. Here are links to the int.pow() and math.pow() source code so you can see what happens under the hood.

于 2013-04-29T04:44:22.417 回答