我尝试了以下函数(如这些论坛上建议的(来计算功率。然而,它导致程序挂断。
static long ipow(int b, int e) {
long r = 1;
while (e--) r *= b;
return r;
}
double cfilefn(int a, int b, int c) {
return (ipow(a, b) / (double)c);
}
cfilefn(2,3,4);
这个功能看起来不错。错误在哪里?如何解决?
如果第二个参数是负数,ipow
函数将表现错误:当e
到达INT_MIN
时,它将运行一段时间并具有实现定义的行为。您应该将测试while (e--) r *= b;
修改为:
static long ipow(int b, int e) {
long r = 1;
while (e-- > 0)
r *= b;
return r;
}
但是请注意,ipow
将导致中等大小的e
值的算术溢出,并且由于您希望从cfilefn
得到double
结果,因此应使用double
算术作为幂函数:
#include <math.h>
double cfilefn(int a, int b, int c) {
return pow(a, b) / c;
}