当前位置:   article > 正文

C++中的power函数_c++ power

c++ power

在cmath头文件中存在函数pow,在stl_numeric.h中存在对于power的具体实现

只看一下对于power的具体实现,之前不知道有没有听说过快速幂,power可以说就是快速幂的实现

函数原型如下:

  1. template <class T, class Integer>
  2. inline T power(T x, Integer n) {
  3. return power(x, n, multiplies<T>()); //默认使用乘法的仿函数
  4. }
  1. template <class T>
  2. struct multiplies : public binary_function<T, T, T> {
  3. T operator()(const T& x, const T& y) const { return x * y; }
  4. };

发现power中默认实现x^n操作,那么具体实现如下:

  1. template <class T, class Integer, class MonoidOperation>
  2. T power(T x, Integer n, MonoidOperation op) {
  3. if (n == 0)
  4. return identity_element(op);
  5. else {
  6. while ((n & 1) == 0) { //这里发现n一直为偶数,那么直接原数相乘,n缩小2倍
  7. n >>= 1;
  8. x = op(x, x);
  9. }
  10. T result = x; //这里result保存一个x,n可以理解为变回奇数
  11. n >>= 1; //缩小2倍,继续指向下面的操作
  12. while (n != 0) {
  13. x = op(x, x);
  14. if ((n & 1) != 0) //发现是奇数 将奇数去除,即乘一个x
  15. result = op(result, x);
  16. n >>= 1;
  17. }
  18. return result; //最终结果result
  19. }
  20. }

感觉这样的实现相对于之前的一直在写的快速幂,逻辑性更好一些,并且这里支持泛型以及仿函数操作操作,可以不使用默认的乘法仿函数,改用自己定义的仿函数!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/656826
推荐阅读
相关标签
  

闽ICP备14008679号