用C写不带math.h的Pow函数
嗨,我想在不使用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>
这个代码是怎么回事?当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”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到Ifb<0
,那么结果就不是int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能返回任何对b有用的内容b当b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到Ifb<0
,那么结果就不是int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能返回任何对b有用的内容b当b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到Ifb<0
,那么结果就不是int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能返回任何对b有用的内容b当b@Omerh是一个标准的标题,我想知道为什么它不可用?作为一个建议,请尝试使用平方算法进行求幂,请参阅。它比“naive”方法快得多。这可能也会教你递归。这个问题似乎离题了,因为它是关于代码检查的,应该迁移到Ifb<0
,那么结果就不是int
。功率(1,-2)为0.25。因此,如果不更改返回类型,就不可能真正返回任何对b有用的内容,为什么不仅仅是1/MyPow(a,-b)?1/MyPow(a,-b)
几乎总是0
(除非b==1
,然后它就是1
)。@shekharsuman:因为所有涉及的值都有typeint
。如果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;
}