zoukankan      html  css  js  c++  java
  • 计算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 的结果。
  • 相关阅读:
    译:DOM2中的高级事件处理(转)
    Cookbook of QUnit
    URI编码解码和base64
    css截断长文本显示
    内置对象,原生对象和宿主对象
    HTML中的meta(转载)
    iframe编程的一些问题
    自动补全搜索实现
    new的探究
    深入instanceof
  • 原文地址:https://www.cnblogs.com/emituofo/p/2261636.html
Copyright © 2011-2022 走看看