• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小比丘
博客园    首页    新随笔    联系   管理    订阅  订阅
计算n次幂的C算法

下面是使用C语言计算 an(a任意实数,n 是正整数)的最快算法。
它利用了测试一个数是奇数在计算机上是非常容易的,和通过简单的移所有位向右来除以 2 的事实。

  • 步骤 1,初始化某个变量
    y := 1, k := n, f := a
  • 步骤 2,测试 k
    如果 k 为 0,跳转步骤 7
  • 步骤 3,(k 不是 0,测试 k 是否为偶数)
    如果 k 是偶数,跳转步骤 5
  • 步骤 4,(k 是奇数,乘入它)
    y: = y * f
  • 步骤 5,(k 除以 2 / 忽略余数,通过移位做除法,平方 f)
    k := k 右移 1 位 f := f * f
  • 步骤 6,(循环)
    回到步骤 2
  • 步骤 7,(完成,y 是结果 = an)
    返回 y

在C语言中,你可以写如下算法:

   double power(double a, unsigned int n)
{
double y = 1;
double f = a;
unsigned int k = n;
while (k != 0) {
if ((k & 1) != 0) y *= f;
k >>= 1;
f *= f;
}
return y;
}

在一个天真的 a^100 的乘法中,我们可能需要乘 a 的循环的 100 次迭代,而这个循环迭代只用 7 次(数 100 写为 7 位)。

这个算法可以通过套上下列步骤轻易的扩展到有符号整数:

  • 步骤 1. 如果 k 是负数,取负这个值得到整数 k。n 仍记住最初的值。
  • 步骤 2. 进行对 y = a | k | 的上述计算
  • 步骤 3. 如果 n 是负数,倒转结果 y := 1/y。y 现在是 an 对整数 n 的结果。
posted on 2011-11-24 14:36  小比丘  阅读(1470)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3