为什么这个幂计算函数崩溃了

  • 本文关键字:计算 函数 崩溃 c
  • 更新时间 :
  • 英文 :


我尝试了以下函数(如这些论坛上建议的(来计算功率。然而,它导致程序挂断。

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; 
}

最新更新