发新帖本帖赏金 0.20元(功能说明)我要提问
返回列表
打印
[C语言]

幂指函数C语言实现

[复制链接]
1393|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 山东电子小菜鸟 于 2018-4-13 16:57 编辑
double mypow(float base, short pow)
{
        long i;
        double result = 1;
        if (base == 0)
                return 0;

        i = pow;
        if (pow < 0)
        {
                i = -1 * pow;
                base = 1 / base;
        }
        while (i > 0)
        {
               result *= base;
                i--;
        }
        return result;
}

相关帖子

沙发
airwill| | 2018-4-13 17:34 | 只看该作者
虽然可以实现, 但如果 pow 的数值比较大的话, 这个循环耗时太久了, 还不如库里的级数算法快呢

使用特权

评论回复

打赏榜单

山东电子小菜鸟 打赏了 0.10 元 2018-04-13
理由:意见很好

板凳
山东电子小菜鸟|  楼主 | 2018-4-13 19:16 | 只看该作者
airwill 发表于 2018-4-13 17:34
虽然可以实现, 但如果 pow 的数值比较大的话, 这个循环耗时太久了, 还不如库里的级数算法快呢 ...
double pow_i(double num,int n)//计算num的n次幂,其中n为整数 
{
   double powint=1;
   int i;
   for(i=1;i<=n;i++) powint*=num;
   return powint;
}
double pow_f(double num,double m)//计算num的m次幂,num和m可为双精度,num大于零
{
    int i,j;
    double powf=0,x,tmpm=1;
    x=num-1;
    for(i=1;tmpm>1e-12 || tmpm<-1e-12;i++)//当tmpm不在次范围时,停止循环,范围可改
           {
               for(j=1,tmpm=1;j<=i;j++)
                    tmpm*=(m-j+1)*x/j;
                    powf+=tmpm;
           }
    return powf+1;
}
double pow_ff(double num,double m)//调用pow_f()和pow_i(),计算num的m次幂,是计算幂的入口
{
    if(num==0 && m!=0) return 0;//若num为0,则返回0
        else if(num==0 && m==0) return 1;// 若num和m都为0,则返回1
    else if(num<0 && m-int(m)!=0) return 0;//若num为负,且m不为整数数,则出错,返回0
    if(num>2)//把底数大于2的情况转为(1/num)^-m计算
        {
            num=1/num;
                m=-m;
                }
        if(m<0) return 1/pow_ff(num,-m);//把指数小于0的情况转为1/num^-m计算
    if(m-int(m)==0) return pow_i(num,m);/*当指数为浮点数是,分成整数和小数分别求
                                            幂,这是因为但底数较小式,用pow_f直接求幂
                                                                                误差大,所以分为指数的整数部分用pow_i,小
                                                                                数部分用pow_f求.*/
    else return pow_f(num,m-int(m))*pow_i(num,int(m));
    return pow_f(num,m);
}

使用特权

评论回复
地板
linqing171| | 2018-4-15 19:13 | 只看该作者
鸟哥,再给贴个实用点的:双浮点,可保证五位有效位数的快速算法。印象里读书的时候我见过。

使用特权

评论回复

打赏榜单

山东电子小菜鸟 打赏了 0.10 元 2018-04-16

发新帖 本帖赏金 0.20元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq:641208111;技术交流群:377640799 大学电子竞赛预热赛开赛啦~千元大奖等你来拿火热进行中!!点击参加活动 欢迎加个人QQ:641208111一起交流合作

140

主题

3082

帖子

23

粉丝