pow(x,y)函數的用法及實現算法


pow函數是求次方的函數,

函數原型是double pow(double a,double b);
使用時應包含math.h頭文件。

1,C/C++中的數學函數編輯
原型:在TC2.0中原型爲extern float pow(float x, float y); ,而在VC6.0中原型爲double pow( double x, double y );
頭文件:math.h/cmath(C++中)
功能:計算x的y次冪。
返回值:x不能爲負數且y爲小數,或者x爲0且y小於等於0,返回冪指數的結果。
返回類型:double型,int,float會給與警告!

2,pow函數的重載編輯
C++提供以下幾種pow函數的重載形式:
double pow(double X,int Y);
float pow(float X,float Y);
float pow(float X,int Y);
long double pow(long double X,long double Y);
long double pow(long double X,int Y);
使用的時候應合理設置參數類型,避免有多個“pow”實例與參數列表相匹配的情況。
其中較容易發生重載的是使用形如:
int X,Y;
int num=pow(X,Y);
這是一個比較常用的函數,但是編譯器會提醒有多個“pow”實例與參數列表相匹配。
可以使用強制類型轉換解決這個問題:num=pow((float)X,Y);


函數pow(x,y)實現運算x^y,即x的y次方,這裏x和y都爲整數。

算法的基本思想是,減少乘法次數,重複利用結算結果,例如:
x^4,如果逐個相乘的話,需要四次乘法。如果我們這樣分解(x^2)*(x^2)就只需要2兩次乘法,因爲x^2的結果我們可以重複利用。所以我們最好做對稱的分解指數y,然後求x^(y/2)的平方。

具體算法如下:
1 如果y爲偶數,直接計算mypow(x, y/2)*mypow(x, y/2);
2 如果y爲奇數,則y-1爲偶數,回到了第一種情況。

int mypow(int x, int y)  
{  
    if (y == 1) return x;  
    int result = 0;  
    int tmp = mypow(x, y/2);  
    if(y&1 != 0) //奇數  
    {  
        result = x * tmp * tmp;  
    }  
    else  
    {  
        result = tmp * tmp;  
    }  
  
    return result;  
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章