2013-04-28 146 views
1

我想知道,因为当我在检查模式下运行我的代码时,似乎有一些差异。例如:x.pow(n)和pow(x,n)之间的区别是什么?

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的类型更改为双倍。为什么是这样?两者之间的一般差异也很好理解。谢谢!

+0

我不认为int,num或double有pow方法,只有Math.pow()。 http://api.dartlang.org/docs/releases/latest/dart_math.html#pow http://api.dartlang.org/docs/releases/latest/dart_core/num.html – 2013-04-29 01:07:45

+0

我知道它没有列在api引用,但可以尝试像'print(9.pow(2));'并且它可以工作。 – CopOnTheRun 2013-04-29 02:21:06

回答

3

更新: int/num/double.pow()当前只存在于虚拟机中,将会是removed。改为使用math.pow()


为int.pow签名()是:

int pow(int exponent) 

所以下面的例子在检查模式中失败1/2的计算结果不是整数。

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

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

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

这里是链接到math.pow()文档。这里有int.pow()math.pow()源代码的链接,这样你就可以看到底下发生了什么。

相关问题