朋友们,我想编写一个函数实现和pow()函数一样的功能,但我编写的代码只能实现整型数据计算,请问应该如何修改从而达到所有类型数据均可以进行计算的目的,此外,除了这一种方法外还有没有别的方法来实现同样的功能。谢谢!
#include <stdio.h>
int main()
{
double power(double x,double y);
double a,b,c;
printf("Please input 2 numbers:");
scanf("%lf%lf",&a,&b);
c=power(a,b);
printf("%lf raised %lf is %lf",a,b,c);
return 0;
}
double power(double x,double y)
{
double s,i;
s=1;
for(i=0;i<y;i++)
s=s*x;
return s;
}
{
register double ret, value;
double r = 1.0;
long p = (long) y;
if (x == 0.0 && y > 0.0)
return 0.0;
if (y == (double) p)
{
if (p == 0)
return 1.0;
if (p < 0)
{
p = -p;
x = 1.0 / x;
}
while (1)
{
if (p & 1)
r *= x;
p >>= 1;
if (p == 0)
return r;
x *= x;
}
}
__asm__(
"fmul %%st(1);"
"fst %%st(1);"
"frndint;/n/t"
"fxch;/n/t"
"fsub %%st(1);/n/t"
"f2xm1;/n/t"
: "=t" (ret), "=u" (value)
: "0" (log2 (x)), "1" (y)
);
ret += 1.0;
__asm__(
"fscale"
: "=t" (ret)
: "0" (ret), "u" (value)
);
return ret;
}