用C写不带math.h的Pow函数

用C写不带math.h的Pow函数,c,function,recursion,pow,C,Function,Recursion,Pow,嗨,我想在不使用math.h库的情况下为pow函数编写代码 这个代码是怎么回事?当b除了一个条件外,一切都似乎完美时,我如何修复它:-当b除了一个条件外,一切似乎都完美时:-当b除了一个条件外,一切似乎都完美时:-当b一个具有较少复杂性来源于 一种从 一种从 一种从 也许是我认为最好的方式 int-pow(int-base,int-exp) { 如果(exp>=1; 基数*=基数; } 返回结果; } 可能是我认为最好的方式 int-pow(int-base,int-exp) { 如果(exp>

嗨,我想在不使用math.h库的情况下为pow函数编写代码


这个代码是怎么回事?当b除了一个条件外,一切都似乎完美时,我如何修复它:-
当b除了一个条件外,一切似乎都完美时:-
当b除了一个条件外,一切似乎都完美时:-
当b一个具有较少复杂性来源于


一种从


一种从


一种从


也许是我认为最好的方式

int-pow(int-base,int-exp)
{
如果(exp<0)
返回-1;
int结果=1;
while(exp)
{
if(exp&1)
结果*=基数;
exp>>=1;
基数*=基数;
}
返回结果;
}

可能是我认为最好的方式

int-pow(int-base,int-exp)
{
如果(exp<0)
返回-1;
int结果=1;
while(exp)
{
if(exp&1)
结果*=基数;
exp>>=1;
基数*=基数;
}
返回结果;
}

可能是我认为最好的方式

int-pow(int-base,int-exp)
{
如果(exp<0)
返回-1;
int结果=1;
while(exp)
{
if(exp&1)
结果*=基数;
exp>>=1;
基数*=基数;
}
返回结果;
}

可能是我认为最好的方式

int-pow(int-base,int-exp)
{
如果(exp<0)
返回-1;
int结果=1;
while(exp)
{
if(exp&1)
结果*=基数;
exp>>=1;
基数*=基数;
}
返回结果;
}


b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到If
b<0
,那么结果就不是
int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能返回任何对
b有用的内容
b当
b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到If
b<0
,那么结果就不是
int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能返回任何对
b有用的内容
b当
b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到If
b<0
,那么结果就不是
int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能返回任何对
b有用的内容
b当
b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到If
b<0
,那么结果就不是
int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能真正返回任何对
b有用的内容,为什么不仅仅是1/MyPow(a,-b)?
1/MyPow(a,-b)
几乎总是
0
(除非
b==1
,然后它就是
1
)。@shekharsuman:因为所有涉及的值都有type
int
。如果
something
不是
1
0
,则
1
除以
something
的整数将返回
0
。他的函数仍然返回int,因此对于负b,它仍然是0……是的,他显然需要将其函数的返回类型从int更改为float——这很明显!他会做/管理的。为什么不只是1/MyPow(a,-b)?
1/MyPow(a,-b)
几乎总是
0
(除非
b==1
,然后就是
1
)。@shekharsuman:因为所有涉及的值都有类型
int
。如果
something
不是
1
0
,则
1
除以
something
的整数将返回
0
。他的函数仍然返回int,因此对于负b,它仍然是0……是的,他显然需要将其函数的返回类型从int更改为float——这很明显!他会做/管理的。为什么不只是1/MyPow(a,-b)?
1/MyPow(a,-b)
几乎总是
0
(除非
b==1
,然后就是
1
)。@shekharsuman:因为所有涉及的值都有类型
int
。如果
something
不是
1
0
,则
1
除以
something
的整数将返回
0
。他的函数仍然返回int,因此对于负b,它仍然是0……是的,他显然需要将其函数的返回类型从int更改为float——这很明显!他会做/管理的。为什么不只是1/MyPow(a,-b)?
1/MyPow(a,-b)
几乎总是
0
(除非
b==1
,然后是
1
    int MyPow(int a,int b){
      if(b<0)      
        return 1 / MyPow (a,-b)
      else if(b==0)
        return 1;
      else if(b==1)
        return a;
      else
        return a*MyPow(a,b-1)
    }
return (1.0/a)*MyPow(a,abs(b)-1);   //where  abs(b) is  absolute value of b.
return (1.0/a)*(MyPow(a,b+1));      
float MyPow(int a,int b)
float power(float x, int y)
{
    float temp;
    if( y == 0)
       return 1;
    temp = power(x, y/2);       
    if (y%2 == 0)
        return temp*temp;
    else
    {
        if(y > 0)
            return x*temp*temp;
        else
            return (temp*temp)/x;
    }
}
int pow(int base, int exp)
    {
      if(exp < 0)
        return -1;

        int result = 1;
        while (exp)
        {
            if (exp & 1)
                result *= base;
            exp >>= 1;
            base *= base;
        }

        return result;
    }