c语言关于pow函数的一个问题
先初始化一维数组array,然后输入一个四位数guess,打算检测guess与array[]里面的数是否相等,可是出了个问题!!!!(请对照下图来看)这个是我的部分程序:...
先初始化一维数组array,然后输入一个四位数guess,打算检测guess与array[ ]里面的数是否相等,可是出了个问题!!!!(请对照下图来看)
这个是我的部分程序:
这是用Cfree5单步调试的截图:
guess我输入的是1236,现在是刚执行完p的赋值那行。如图,当i=2时,temp是等于2的,可是p却等于199!!p为什么不是200??
然后我试着改了一下i的值,发现当i为偶数时,p的值都会少1 ?!求大神解答。 展开
这个是我的部分程序:
这是用Cfree5单步调试的截图:
guess我输入的是1236,现在是刚执行完p的赋值那行。如图,当i=2时,temp是等于2的,可是p却等于199!!p为什么不是200??
然后我试着改了一下i的值,发现当i为偶数时,p的值都会少1 ?!求大神解答。 展开
2个回答
展开全部
pow 函数是 double 型。是否你的编译器引入了误差。你只是处理4位数,你可以自己写 my_pow(int x):
int my_pow(int x){
int i,v=1;
if (x==0)return 1;
for (i=1;i<=x;i++) v=v*10;
return v;
}
-------------
调用:
int guess,i,temp,p;
scanf("%d",&guess);
for (i=3;i>=0;i--){
temp=guess/my_pow(i);
p =temp*my_pow(i);
guess = guess-p;
}
不会引入误差。
int my_pow(int x){
int i,v=1;
if (x==0)return 1;
for (i=1;i<=x;i++) v=v*10;
return v;
}
-------------
调用:
int guess,i,temp,p;
scanf("%d",&guess);
for (i=3;i>=0;i--){
temp=guess/my_pow(i);
p =temp*my_pow(i);
guess = guess-p;
}
不会引入误差。
追问
嗯。pow 函数是 double 型,精确度引起的误差,无论怎样都会差1。已经自己写了个pow函数解决问题,谢谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询