c语言pow在if里没法判断

如图这样子判断永远不成立。但是在两个pow前加了(int)就正常了为什么呢?不是计算的时候会都向double转换吗 不能做比较吗顺便如果写成图二那样也不行

首先,抛开问题,题主以后问问题能不能把代码用文字贴出来,这样别人也好回答。

正题:

pow的返回值是double类型,所以必定不能做判断相等的运算啊。然后你用int强制类型转换这题中大多数情况是可以的,因为如果pow的两个参数都是整数,结果一般不会有什么误差。图二的方法你得加fabs(xxxx) < 1e-4这样子,因为pow的结果可能比实际数值大点,或者小点,然后还有个除法的误差,这个你要具体试了才知道,但最简单就是用fabs。另外如果是整数运算,建议自己实现pow运算。

int pow(int a, int b) {
    int res = 1;
    while(b--) {
        res *= a;
    }
    return res;
}

结果比较大的话,建议用long long 类型。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-19
pow函数的返回值是double型,直接与int比较会出精度问题,要用(int)强制为int型才能正确地与int型数据比较。