x.pow(n)和pow(x,n)有什么区别?

时间:2013-04-28 23:01:13

标签: dart

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

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的类型更改为double。为什么是这样?另外两者之间的一般差异很难知道。谢谢!

1 个答案:

答案 0 :(得分:3)

更新: int / num / double.pow()目前仅存在于VM中,并且为removed。请改用math.pow()


int.pow()的签名是:

int pow(int exponent)

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

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

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

并且,调用math.pow(num x,num exponent)不需要整数指数,如果x是整数且指数是double,则可能返回double。

以下是math.pow()文档的链接。以下是int.pow()math.pow()源代码的链接,以便您了解幕后发生的情况。