我尝试实施以下计算:
#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。有什么问题?
答案 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));