美文网首页
聊聊指数运算的优化

聊聊指数运算的优化

作者: 80s老人 | 来源:发表于2015-02-07 23:05 被阅读88次

我并不了解编译器内部怎样运作,但如果编译器不做的话,有些优化就需要程序员有所考量!
如果我们要算一个 y=x^13
我们如果这接算,就需要12次乘法运算,如果是浮点数,那开销很大。
我们这样做 y=x13=x8 * x^4 * x
t1=x^2
t2=t1^2
t3=t2^2
y=t3t2x
这样总共5次乘法
再来个例子 y=x^27
需要26次乘法运算,显然这不是我们需要的结果。
改成这样
y= ((x3)3)^3
只需要6次乘法就得到结果,计算机显然更喜欢这样。
现在,我们来抽象一下我们的算法

int iexp(int x, unsigned n) {
    int p, y;

y = 1;                   // Initialize result
p = x;                   // and p.
while(1) {
  if (n & 1) y = p*y;   // If n is odd, mult by p.
  n = n >> 1;           // Position next bit of n.
  if (n == 0) return y; // If no more bits in n.
  p = p*p;              // Power for next bit of n.
   }
}

相关文章

  • 聊聊指数运算的优化

    我并不了解编译器内部怎样运作,但如果编译器不做的话,有些优化就需要程序员有所考量!如果我们要算一个 y=x^13我...

  • 聊聊平方根运算的优化

    可能有人连平方根是怎么计算的都不知道,我指的是计算机是怎么计算的。其实有很多种办法都可以计算平方根,我们一般会用#...

  • 聊聊 autorelease 的优化

    聊聊 autorelease 的优化聊聊 autorelease 的优化

  • C primer Plus study note chapter

    运算符、表达式、语句基本运算符:=,+,_*,/,指数运算符在C中是不存在的,C中提供了一个专门的函数进行指数运算...

  • 算术运算符

    算术运算符对数字(文字或变量)执行算术运算。 加法运算 减法运算 乘法运算 除法运算 余数运算 自增自减运算 指数...

  • 对数运算电路和指数运算电路

    对数运算电路如下: 指数运算电路即把对数运算电路中晶体管和电阻的位置互换,如下:

  • Javascript的位运算

    这里聊聊Javascript的位运算,但是只聊几个(与运算、或运算、否运算)。 可能有人会说:位运算有那么多内容,...

  • 单词

    wordmeanwordmeanmathematics数学;运算impractical不现实的exponent指数...

  • JavaScript的运算符

    算术运算符 加法运算符:x + y减法运算符: x - y乘法运算符: x * y除法运算符:x / y指数运算符...

  • swift中的乘方运算(指数运算)

    周末做个小程序被乘方给搞懵逼了,我也不记得是以前从来没用过还是说后面版本改了,swift中的乘方运算不是^符号,这...

网友评论

      本文标题:聊聊指数运算的优化

      本文链接:https://www.haomeiwen.com/subject/ksodxttx.html