整数的非负整数次幂（不考虑大数）

线性求幂

typedef long long LL;
LL pow(int base, int exponent) {
LL ans = 1;
for (int i = 0; i < exponent; ++i) {
ans *= base;
}
return ans;
}

快速幂算法登场

a11=a10112=a10002+102+12=a10002a102a12=a8a2a1

typedef long long LL;
LL pow(int base, int exponent) {
LL ans = 1, last_pow = base;
while (exponent > 0) {
// 如果最低位为1
if ((exponent & 1) != 0)
ans = ans * last_pow ;
exponent = exponent >> 1;
last_pow = last_pow * last_pow;
}
return ans;
}

整数次幂

ax=1axx

a0=1a0

typedef double NumberType;

// 计算非负整数次幂的函数
NumberType powWithoutNegativeExp(NumberType base, int exponent) {
NumberType ans = 1, last_pow = base;
while (exponent > 0) {
if ((exponent & 1) != 0)
ans = ans * last_pow ;
exponent = exponent >> 1;
last_pow = last_pow * last_pow;
}
return ans;
}

// 浮点数相等的判断比较特别
bool equalD(NumberType numA, NumberType numB) {
static const NumberType ERROR = 1e-12;
return (numA - numB <= ERROR && numA - numB >= -ERROR);
}

// 处理各种情况的幂运算的函数
NumberType pow(NumberType base, int exponent) {
// 0的0次幂没有意义，抛出异常
if (exponent == 0 && equalD(base, 0)) {
throw logic_error("Zero's zero exponent is undefine.");
}

bool isNegative = false;
if (exponent < 0) {
isNegative = true;
exponent = -exponent;
}

NumberType result = powWithoutNegativeExp(base, exponent);
return isNegative ? 1 / result : result;
}

#include <iostream>
#include <stdexcept>
using namespace std;

typedef double NumberType;

NumberType powWithoutNegativeExp(NumberType base, int exponent) {
NumberType ans = 1, last_pow = base;
while (exponent > 0) {
if ((exponent & 1) != 0)
ans = ans * last_pow ;
exponent = exponent >> 1;
last_pow = last_pow * last_pow;
}
return ans;
}

bool equalD(NumberType numA, NumberType numB) {
static const NumberType ERROR = 1e-12;
return (numA - numB <= ERROR && numA - numB >= -ERROR);
}

NumberType pow(NumberType base, int exponent) {
if (exponent == 0 && equalD(base, 0)) {
throw logic_error("Zero's zero exponent is undefine.");
}

bool isNegative = false;
if (exponent < 0) {
isNegative = true;
exponent = -exponent;
}

NumberType result = powWithoutNegativeExp(base, exponent);
return isNegative ? 1 / result : result;
}

int main() {
for (double i = 1.1; i < 1.5; i+=0.1) {
for (int j = 1; j < 10; ++j)
cout << i << ' ' << j << ' ' << pow(i, j) << endl;
}

return 0;
}
• 本文已收录于以下专栏：

pow(x,y)函数的用法及实现算法

pow函数是求次方的函数， 函数原型是double pow(double a,double b); 使用时应包含math.h头文件。 1,C/C++中的数学函数编辑 原型：在TC2.0...
• changgui5211
• 2015年07月11日 18:15
• 7159

探索c++的函数pow()的实现方法·数学与程序设计的结合(zz)

• xiaoxiongli
• 2008年02月29日 19:58
• 18329

Math.pow函数的Java实现。

• 2014年03月24日 23:34
• 2KB
• 下载

C语言10的n次方pow函数不好用，自己写一个简单的

C语言中有两个函数可以实现10的n次方，分别是double pow（double x, double y），double pow10（int p） 前者是实现x的y次方，后者是实现10的p次方 使用这...
• wyqwclsn
• 2014年10月09日 14:13
• 5463

pow()函数自实现

• qq_33724710
• 2016年05月03日 15:14
• 4606

OpenGL ES着色器语言之内建函数（官方文档第八章）

OpenGL ES着色语言为标量和向量操作定义了一套内建便利函数。有些内建函数可以用在多个类型的着色器中，有些是针对固定硬件的，所以这部分只能用在某个特定的着色器上。        内建函数基本上可...
• wangyuchun_799
• 2012年07月22日 00:33
• 17343

自己写一个pow()函数

• Enrica_Shi
• 2017年09月21日 05:50
• 110

c++中pow函数

• cherishwangq
• 2016年11月15日 10:38
• 916

自己写一个strcmp函数（C++）

• QianShouYuZhiBo
• 2013年08月09日 21:31
• 2657

pow函数的性能测试

• u013445530
• 2014年08月12日 19:55
• 1219

举报原因： 您举报文章：《剑指offer》：自己写一个pow函数 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)