為什么自己實現一個pow()函數呢?昨天在Linux操作系統中調用這一個函數時,一直報錯,也沒有查找到具體的原因。故心血來潮實現這一函數功能。
函數所在頭文件:
在"math.h"頭文件中
函數原型
-
1 double pow (doublebase,double exponent);
函數功能
求base的exponent冪,即求某個數的多少次冪
函數參數
base :基數(double類型)
exponent :冪值,即進行多少次冪的值
函數返回值
如果成功執行,返回求得某個數的多少次冪的值;否則,返回錯誤。
實例一:pow()函數簡單使用
-
1 #include<stdio.h> 2 #include<math.h> 3 4 int main(void) 5 { 6 double value1 = pow(2.0,3.0); 7 printf("value1 = %f\n", value1); 8 9 double value2 = pow(2.22,3.0); 10 printf("value2 = %f\n", value2); 11 12 double value3 = pow(5.21,4.11); 13 printf("value3 = %f\n", value3); 14 15 return0; 16 }
運行結果:
實例二:pow()函數實現代碼
-
1 #include<stdio.h> 2 #include<math.h> 3 //實現pow()函數 4 double mypow(double num,double n) 5 { 6 double value =1; 7 int i =1; 8 if(n ==0) 9 { 10 value =1; 11 } 12 else 13 { 14 while(i++<= n) 15 { 16 value *= num; 17 } 18 } 19 return value; 20 } 21 22 int main(void) 23 { 24 double value1 = mypow(2.0,3.0); 25 printf("value1 = %f\n", value1); 26 27 double value2 = mypow(2.22,3.0); 28 printf("value2 = %f\n", value2); 29 30 double value3 = mypow(5.21,4.11); 31 printf("value3 = %f\n", value3); 32 33 return0; 34 }
運行結果
操作注意:
可能導致錯誤的情況:
- 如果底數 x 為負數並且指數 y 不是整數,將會導致 domain error 錯誤。
- 如果底數 x 和指數 y 都是 0,可能會導致 domain error 錯誤,也可能沒有;這跟庫的實現有關。
- 如果底數 x 是 0,指數 y 是負數,可能會導致 domain error 或 pole error 錯誤,也可能沒有;這跟庫的實現有關。
- 如果返回值 ret 太大或者太小,將會導致 range error 錯誤。
在使用"math.h"頭文件里面的庫函數時,在Linux系統上進行GCC編譯時,需要在命令后面加上"-lm"(鏈接庫函數的文件);否則會報錯。