stl numeric中的power演算法剖析

2021-06-06 07:14:20 字數 879 閱讀 6193

在power演算法中求乙個數x的n次方分成兩部分,一是當n為偶數時計算方法,另一部分是當n為奇數時的計算方法。在n的"分解"過程中,還可能還會出現偶數和奇數部分的**都參與計算。

n為偶數,計算方式:

假設 y = x*x , z = n / 2;

那麼xn = y

z。例如如下步驟:

28 = 4

4。 (1)

44 = 16

2。  (2)

162 = 256

1。(3) // 此時n == 1,即結果最終轉換成了乙個數的奇次方。

while ((n & 1) == 0)

n為奇數,計算方式:

公式:xn = xn-1 * x。既然n此時為奇數,那麼n-1就為偶數了。例如如下步驟:

27 =2

6 * 2。

(1)26 * 2 = 4

3* 2。

(2)43* 2 = (4

2 * 4) * 2 =  4

2 * (4 * 2) = 4

2 * 8。  (3)

42 * 8 = 16

1 * 8。

(4)t result = x; // 步驟(1)被隱含執行了

n >>= 1;

while (n != 0)

n為較特殊的偶數情況:

如當x為2,n為14時。執行偶數如下

214 = 4

7。執行上面操作後,變為x是4,n是7的計算方式,也就是我們可以認為值的計算已被轉換成了n為奇數情形的計算方式了。

最後注意對stl中的這演算法不必侷限於純數**算--注意泛型中所提到的connect。

STL中對Pow函式的實現

在 stl原始碼剖析 中看到了pow函式在stl中的實現,感覺程式寫的非常巧妙。列出原始碼 template inline t identity element plus template inline t identity element multiplies template inline t ...

python中pow函式用法及功能說明

冪運算是高更數學的應用學科,是一種關於冪的數 算。同底數冪相乘,底數不變,指數相加。同底數冪相除,底數不變,指數相減。冪的乘方,底數不變,指數程式設計客棧相乘。適用於精確計算領域。計算機作為精確計算的一種方式,含有大量的冪運算。在python中就有內建函式pow函式表示冪的運算。1 pow 函式 p...

C語言中pow函式的使用

標頭檔案 include 1.函式原型 pow 函式用來求 x 的 y 次冪 次方 x y及函式值都是double型 其原型為 double pow double x,double y 2.使用 pow 用來計算以x 為底的 y 次方值,然後將結果返回。設返回值為 ret,則 ret xy。3.注意...