大部分数据没有问题,但输入 0.01 1 的时候就错误了,求大佬解决
#include <stdio.h>
//用牛顿迭代法实现ln
double my_ln(double x){
double epsilon=1e-30; //迭代的误差限制
double result=0.0;
double term=(x-1.0)/(x+1.0);
double currentTerm=term;
int n=1;
while(currentTerm>epsilon||currentTerm<-epsilon){
result+=currentTerm;
currentTerm*=term*term*(2*n-1)/(2*n+1);
n++;
}
return 2*result;
}
//用牛顿迭代法实现exp
double my_exp(double x){
double epsilon=1e-30; //精度
double exp=1.0,term=1.0;
int n=1;
while(term>epsilon){
term*=x/n;
exp+=term;
n++;
}
return exp;
}
double my_pow(double x, double y){
return my_exp(y*(my_ln(x)));
}
int main() {
double x,y;
scanf("%lf%lf",&x,&y);
printf("%.10lf\n",my_pow(x,y));
return 0;
}