2013-04-28 142 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()源代碼的鏈接,這樣你就可以看到底下發生了什麼。

相關問題