分工意外的结果

时间:2014-05-07 18:22:12

标签: c division

我尝试实施以下计算:

#include <stdio.h>
#include <math.h>

int main(){

    float sum = 0;
    int c = -4;
    float x1 = 136.67;
    float x2 = 2.38;

    sum = c / (pow(abs(x1 - x2), 2));
    printf("%f %f %f",sum,x1,x2);

    return 0;
}

但执行后sum的值变为-4。有什么问题?

2 个答案:

答案 0 :(得分:2)

abs<stdlib.h>中声明。它需要一个int参数并返回int结果。

缺少的#include <stdlib.h>也可能导致问题。您正在使用浮点参数调用abs;如果没有可见的声明,编译器可能会认为它需要一个double参数,导致代码不正确。 (根据C90规则;根据C99规则,调用是违反约束的,需要编译时诊断。)

您需要fabs中定义的<math.h>函数。

答案 1 :(得分:0)

abs需要一个整数,并且您提供float。如果您应用显式类型转换,它应该有效:

sum = c / (pow(abs((int)(x1 - x2)), 2));