- #define PCS 1e-8
- //x为底数,y为指数
- double pow(double x,double y)
- {
- double pow=1;
- if(y==0) return 1.0;
- else if(y>0){
- while(y!=0){
- pow*=x;
- --y;
- }
- return pow;
- }
- else{
- y=-y;
- while(y!=0){
- pow*=x;
- --y;
- }
- pow=1.0/pow;
- return pow;
- }
- }
- //x为被开方数,n为开方次数
- double sqrt(double x,unsigned n){
- double lower=0,higher=x;
- double value=(lower+higher)/2;
- if(n==1) goto end;
- //利用二分法求解
- while(pow(value,n)-x>PCS||pow(value,n)-x<-PCS){
- if(pow(value,n)-x>0) higher=value ;
- else lower=value;
- value=(higher+lower)/2;
- }
- return value;
- end:
- return x;
- }