Stackoverflow,
我正在尝试编写一个(非常)简单的程序,用于显示机器精度和触发器如何在其根周围起作用。我的代码如下:
#include <stdio.h>
#include <math.h>
int main(){
const float x = 2.2;
float sum = 0.0;
sum = pow(x,9) - 18*pow(x,8) + 144*pow(x,7) - 672*pow(x,6) + 2016*pow(x,5) -
4032*pow(x,4) + 5376*pow(x,3) - 4608*pow(x,2) + 2304*x - 512;
printf("sum = %d", sum);
printf("\n----------\n");
printf("x = %d", x);
return 0;
}
但我一直认为sum
等于零。起初我以为我的机器可能不尊重优质水平,但是在打印x
之后我发现每次运行程序时x
的值都在变化,并且总是很大(abs(x) > 1e6)
{{1}} 1}}
我把它宣布为一个常数,所以我更加困惑的是什么... ...
仅供参考我正在使用gcc -lm进行编译
答案 0 :(得分:10)
printf("sum = %d", sum);
sum
是float
,而不是int
。您应该使用%f
代替%d
。同样在这里:
printf("x = %d", x);
关于printf()
格式说明符的Reading可能是一个好主意。