我试过"x = y**e",但那没用.
使用该pow
功能(虽然需要float
s/double
s).
man pow
:
#includedouble pow(double x, double y); float powf(float x, float y); long double powl(long double x, long double y);
编辑:BTW,对于正整数幂的特殊情况2
,你可以使用位移:(1 << x)
将等于2
功率x
.这有一些潜在的问题,但通常是正确的.
添加到Evan所说的内容:C没有用于取幂的内置运算符,因为它对于大多数CPU来说不是原始操作.因此,它被实现为库函数.
此外,用于计算函数e ^ X,你可以使用exp(double)
,expf(float)
和expl(long double)
功能.
请注意,您不希望使用^
运算符,它是按位异或运算符.
pow
仅适用于浮点数(double
实际上是s).如果你想获取整数的幂,并且不知道基数是指数2
,你就必须自己动手.
通常愚蠢的方式足够好.
int power(int base, unsigned int exp) { int i, result = 1; for (i = 0; i < exp; i++) result *= base; return result; }
这是一个递归解决方案,它占用O(log n)
空间和时间而不是简单的O(1)
时空O(n)
:
int power(int base, int exp) { if (exp == 0) return 1; else if (exp % 2) return base * power(base, exp - 1); else { int temp = power(base, exp / 2); return temp * temp; } }
与之前的答案类似,这将很好地处理double的正负整数幂.
double intpow(double a, int b) { double r = 1.0; if (b < 0) { a = 1.0 / a; b = -b; } while (b) { if (b & 1) r *= a; a *= a; b >>= 1; } return r; }