啊哈磊_编程从这里起步

标题: 编译器bug [打印本页]

作者: 190192641    时间: 2012-9-7 15:32
标题: 编译器bug
调用pow(a,b) 求幂函数时出错
当a=10 b=2时 函数返回99

自己编写函数
int pow1(int a,int b)
{
int i,n=1;
for(i=0;i<b;i++)
    n*=a;
return n;
}
能得到正确结果100

可以确定下是不是gcc核的问题

发布下调用pow函数时的出错程序:
#include <stdio.h>
int main()   
{
int num=0,a=0,n=0,m=0,l=0,b=0;
next:
printf("THE MathML is NUM=a+aa+aaa+aaaa+.....x\n");
printf("THE x IS pow(10,n-1)a+pow(10,n-2)a....pow(10,n-n)a\n");
printf("Enter a = ");
scanf("%d",&a);
printf("Enter n = ");
scanf("%d",&n);
for(l=1;l<=n;l++)
    {   
    for(m=0;m<l;m++)                    
        b+=pow(10,m)*a;        
    num+=b;
    b=0;
    }
printf("WHEN a = %d , n = %d , NUM = %d \n",a,n,num);
printf("********************\n\n");
num=0;
goto next;
while(1);
return 0;
}   


再发布下自己写pow1函数时,结果正确的程序:
#include <stdio.h>
int pow1(int a,int b)
{
int i,n=1;
for(i=0;i<b;i++)
    n*=a;
return n;
}
int main()   
{
int num=0,a=0,n=0,m=0,l=0,b=0;
next:
printf("THE MathML is NUM=a+aa+aaa+aaaa+.....x\n");
printf("THE x IS pow(10,n-1)a+pow(10,n-2)a....pow(10,n-n)a\n");
printf("Enter a = ");
scanf("%d",&a);
printf("Enter n = ");
scanf("%d",&n);
for(l=1;l<=n;l++)
    {   
    for(m=0;m<l;m++)                    
        b+=pow1(10,m)*a;        
    num+=b;
    b=0;
    }
printf("WHEN a = %d , n = %d , NUM = %d \n",a,n,num);
printf("********************\n\n");
num=0;
goto next;
while(1);
return 0;
}   




作者: 190192641    时间: 2012-9-7 16:29
我用gcc实验了下
没有问题

gcc的pow函数是在math.h的库中的 需调用math.h再pow
啊哈c的pow可以直接调用

应该是编译器本身问题
作者: 凡夫俗子    时间: 2012-9-7 18:21
啊哈C可以少打好几个头文件·  ·  ·




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2